当前位置: 首页 > 编程日记 > 正文

【数据结构】顺序栈的实现(C语言)

栈的基本概念及其描述

栈是一种特殊的线性表,规定它的插入运算和删除运算均在线性表的同一端进行,进行插入操作和删除操作的那一端称为栈顶,另一端称为栈底。

栈的插入操作和删除操作分别称为进栈和出栈。

FILO(First In Last Out)后进先出/先进后出

eg.有1.2.3号火车一次进站,它们的出栈顺序可以是

1.2.3(1来,1走,2来,2走,3来,3走

2.1.3(1来,2来,2走1走,3来,3走

1.3.2(1来,1走,2来,3来,3走2走

3.2.1(1来,2来,3来,3走2走1走

2.3.1(1来,2来,2走,3来,3走1走

栈的主要操作是插入操作和删除操作。

栈(顺序存储)主要要掌握以下操作:

1、初始化

2、判断栈是否为空

3、读栈顶节点值

4、栈的插入操作

5、栈的删除操作

运行环境:Code::Blocks 17.12

下面是头文件

#ifndef SEQSTACK_H_INCLUDED
#define SEQSTACK_H_INCLUDED
#define MAXSIZE 100
#include "stdio.h"
#include "stdlib.h"
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];int top;
}sequence_stack;//栈(顺序存储)的初始化
void init (sequence_stack *st)
{st->top=0;
}int isempty(sequence_stack st)
{return (st.top?0:1);//如果是空的话则返回1
}//取得栈顶(顺序储存)节点值
int read(sequence_stack st)
{if (isempty(st)){printf("该栈是空的!!\n");exit(1);}else{return st.a[st.top-1];}
}//栈(顺序储存)插入操作
void push(sequence_stack *st,datatype x)
{if(st->top==MAXSIZE){printf("该栈是满的!\n");exit(1);}st->a[st->top]=x;st->top++;
}//栈(顺序储存)的删除操作
void pop(sequence_stack *st)
{if (st->top==0){printf("该栈是空的!\n");exit(1);}st->top--;
}//判断表达式的括号是否匹配
int match_kuohao(char c[])
{int i=0;sequence_stack s;init(&s);while(c[i]!='#'){switch(c[i]){case '{':case '[':case '(':push(&s,c[i]);break;case '}':{if (!isempty(s) && read(s)=='{'){pop(&s);break;}else{return 0;}}case ']':{if (!isempty(s) && read(s)=='['){pop(&s);break;}else{return 0;}}case ')':{if (!isempty(s) && read(s)=='('){pop(&s);break;}else{return 0;}}}i++;}return (isempty(s));/*栈是空的则匹配,否则不匹配*/
}void convert(sequence_stack st,int x,int y)
{init(&st);while(x>0){push(&st,x%y);x/=y;}while(st.top){printf("%d",read(st));pop(&st);}printf("\n");
}void menu()
{printf("\t|===================================|\t\n");printf("\t|                                   |\t\n");printf("\t|          顺序栈及其实现           |\t\n");printf("\t|                                   |\t\n");printf("\t|===================================|\t\n");printf("\t|有如下选项:                        |\t\n");printf("\t|===================================|\t\n");printf("\t|【1】栈的初始化                    |\t\n");printf("\t|【2】判断栈是否为空                |\t\n");printf("\t|【3】取得栈顶的节点值              |\t\n");printf("\t|【4】栈的插入操作                  |\t\n");printf("\t|【5】栈的删除操作                  |\t\n");printf("\t|【6】进制转换                      |\t\n");printf("\t|【7】判断表达式括号是否匹配        |\t\n");printf("\t|===================================|\t\n");printf("\t|Ctrl+C结束该程序!!!             |\t\n");printf("\t|===================================|\t\n");
}#endif // SEQSTACK_H_INCLUDED

下面是主程序

#include "stdio.h"
#include "seqstack.h"
int main ()
{sequence_stack st;int i,k;datatype a;char str[100];while(1){menu();printf("\n\n请输入你的选择:");scanf("%d",&i);switch (i){case 1:{init(&st);break;}case 2:{if(isempty(st))printf("该顺序栈为空。");elseprintf("该顺序表不是空栈。");printf("已进行判断。\n\n");break;}case 3:{printf("%d",read(st));printf("\n成功打印顺序栈顶的节点值。\n\n");break;}case 4:{printf("请输入一个想要插入的数:");scanf("%d",&a);push(&st,a);break;}case 5:{pop(&st);printf("栈顶节点已成功删除!\n");printf("还剩下%d个节点\n",st.top);break;}case 6:{printf("请输入一个数字,以及想要转化为的进制:");scanf("%d%d",&a,&k);convert(st,a,k);break;}case 7:{printf("以“#”结束\n\n");scanf("%s",str);if(match_kuohao(str)){printf("配对!\n\n");}else{printf("不配对!\n\n");}break;}}}return 0;
}

相关文章:

iOS绘制图片与文字

2019独角兽企业重金招聘Python工程师标准>>> #####绘制图片与文字 #####1.绘制图片,直接代码说明 加载图片 #pragma mark - 小黄人 -(void) drawImage:(CGRect) rect{UIImage *image[UIImage imageNamed:"黄人"];//图片有可能显示不全&#xf…

php-fpm慢执行日志

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容request_slowlog_timeout 1slowlog /usr/local/php-fpm/var/log/www-slow.log 测试:/usr/local/php-fpm/sbin/php-fpm -t/etc/init.d/php-fpm reloadls ../../var/log/ //生成日志php-fpm.log www-sl…

spring springboot springcloud常用注解

SpringBootApplication 组合注解,用在启动类上,源码: Retention(RetentionPolicy.RUNTIME) SpringBootConfiguration EnableAutoConfiguration ComponentScan public interface SpringBootApplication SpringBootConfiguration Configurat…

解决eclipse ctrl+鼠标左键不能用

选择【Window】菜单 Preferences ——>General——>Editors——>Text Editors——>Hyperlinking 把勾都点上,然后确定KEY 值为 crtl

【数据结构】顺序队列的实现(C语言)

队列的基本概念及其描述 队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。 插入的那一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。 先进先出(First In First Out&…

ethereumjs/ethereumjs-vm-2-API文档

https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/index.md vm.runBlockchain Processes blocks and adds them to the blockchain 处理区块并将其添加到区块链中 Parameters输入参数 blockchain Blockchain A blockchain that to process 一个处理的区块链cb Fu…

qt 拖拽 修改大小(二)

最近项目需要实现windows下橡皮筋的效果,所以对此做了一些了解,特此记录。 首先windows系统是支持橡皮筋效果的,需要使用win32方 法:SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, showFullWindow, NULL, 0);showFullWindow是一个…

互联网大厂技术面试内幕@霞落满天

很多求职者往往并非因为技术不好,而是没有掌握面试的技巧导致不能把握机会,本课程的目的就是本课程先通过比较真实的好简历和不好的简历让大家明白自己的简历有哪些问题,事实上简历是大厂的敲门砖,非常重要,很多人得不…

【数据结构】顺序表的应用(1)(C语言)

问题: 1.将顺序表(a1,a2,…,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型)。 头文件与该头文件一样:【数据结构】顺序…

比特币寒冬中,你更应该关注企业区块链!

公众对区块链的认识也许限于比特币或以太坊,但很多却不知道 Hyperledger(超级账本)。Hyperledger Fabric,是由 IBM 带头发起的一个联盟链项目,2015 年末移交给 Linux 基金会,成为开源项目。Linux 基金会孵化…

JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程

XMX是JVM的最大堆内存大小,XMS是JVM的初始堆内存大小。 不管是工作还是面试经常遇到一个问题就是XMX到底设置多大比较好? 网上的答案大多是说XMX和XMS设置为一样大,但是没有说到底XMX设置多大比较好。 如果设置为和操作系统一样大内存会怎么样? 这篇文章就带你搞清楚这…

【数据结构】顺序表的应用(2)(C语言)

问题: 2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列。 头文件与该头文件一样:【数据结构】顺序表的实现(C语言&am…

OWA登录页面显示为英文而不是中文

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750故障描述:WIN10操作系统使用IE登录OWA的时候,界面语言为英文,WIN10操作系统为中文系统,区域语言都是设置为中文&…

java B2B2C springmvc mybatis多租户电子商城系统-Spring Cloud Feign

1、什么是Feign? 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用…

【数据结构】顺序表的应用(3)(C语言)

问题: 已知一个顺序表中的各节点值是从大到小有序的,设计一个算法,插入一个值为x的节点,使顺序表中的节点仍然是从小到大有序的。 头文件与该头文件一样:【数据结构】顺序表的实现(C语言) #i…

从源码和内核角度分析redis和nginx以及java NIO可以支持多大的并发

有人询问我网上一篇关于“redis为什么单线程这么快”的文章,我建议他不要看了,因为redis是单进程不是单线程,后面的意见不用看了,文章质量肯定不会很好,他也说了自己看了很久源码似乎还是有些云里雾里,所以我就给他分析了为什么redis这么快,这篇主要讲epoll的实现。 从…

背景图片等比缩放的写法background-size简写法

1、背景图片或图标也可像img一样给其宽高就能指定其缩放大小了。 比如一个实际宽高36*28的图标,要缩小一半引用进来的写法就是: background:rgba(0, 0, 0, 0) url("../images/report_icon2x.png") no-repeat scroll left center / 18px 14px; …

深入了解以太坊

正在看这篇文章的你,应该是一名被区块链技术所吸引的开发者或者极客。我相信你已经理解了区块链的技术原理,并急切地想要搞清楚这项技术将为你和你的开发技术栈带来怎样的影响。 如果你需要更基础的区块链技术介绍,可以阅读比特币和以太坊的白…

Netty和JDK源码来看Netty的NIO和JDK的NIO有什么不同

JDK底层提供了NIO实现,在Linux环境会调用内核epoll。 但是Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要自己搞一套NIO呢? 这篇文章带你从jdk的源码和Netty的源码角度来分析为什么Netty要这么做。 JDK源码:openjdk-8u40 Netty源码:netty-4.1 1.先看J…

【数据结构】单链表的实现(C语言)

单链表是线性表链式储存的一种形式,其中的结点一般含有两个域,一个是存放数据信息的info域,另一个是指向该结点后继结点存放地址的指针next域。一个单链表必须要有一个首指针指向链表中的第一个结点。 单链表要掌握以下几种操作:…

《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐

企业IT技术分享(2016-06-29)来自(QQ群:企业私有云平台实战 454544014-推荐)!理解 OpenStack Ceph (1):Ceph OpenStack 集群部署和配置http://www.cnblogs.com/sammyliu…

windows10 安装 mysql8.0.12 详解

【1】下载安装包 官网下载地址:https://downloads.mysql.com/archives/community/ 如下图所示: 下载完成,安装包为mysql-8.0.12-winx64.zip 【2】安装准备 (1)安装路径。拷贝安装包到任意路径,然后解压缩。…

IDEA常用和实用配置以及各种必要插件

主要是收集IDEA常用和不常用配置陆续更新 ------------------------ 启动项目配置 建议使用idea2021.1.3以上版本: ------------------------ maven没有设置自动导包,导致引用不到第三方依赖。 可以点maven的刷新按钮即可。 idea 设置gradle自动更…

linux 调试利器gdb, strace, pstack, pstree, lsof

1)如何使用stracepstack利器分析程序性能?http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html此文有详细介绍怎么用strace和pstack2)Linux下多线程查看工具(pstree、ps、pstack)?http://blog.csdn.net/yfkiss/article/details/67293643)使用strace,lstrace,t…

【数据结构】单链表的应用(C语言)

1、设计一个算法,求一个单链表中的节点数 2、设计一个算法,在一个单链表中值为y的结点前插入一个值为x的结点(值为x的新结点为成为值为y的结点前驱结点) 3、设计一个算法,判断单链表中各结点是否有序 4、设计一个算…

物联网设备僵尸网络趋势分析

物联网(IoT)僵尸网络作者正在适应更安全的物联网设备的转变,这已经将***者的注意力转移到利用物联网设备的漏洞上。由于物联网设备安全性仍处于起步阶段,因此发现命令注入等基本漏洞并不少见。2018年11月,NetScout的As…

Redis6安装配置集群cluster以及集群宕机注意事项

Redis6的cluster模型推荐3主3从 先准备3台服务器,每个上面部署2个redis,服务器配置2核2G: 下面在每台服务器安装redis6,每台机器只要安装一次即可,然后分别配置2个端口的conf文件,分别起来即可&#xff1a…

【数据结构】循环单链表的实现(C语言)

循环单链表应掌握以下基本操作: 1、建立一个空的循环单链表。 2、获得循环单链表的最后一个结点的位置。 3、输出循环单链表中各结点的值。 4、在循环单链表中查找值为x的结点。 5、在循环单链表中第i个结点后插入值为x的新结点。 6、在循环单链表中删除值为x…

DTRACE 专家

http://dtrace.org/blogs/bmc/ https://github.com/bcantrill http://www.tudou.com/programs/view/Q6fHZFgZww4 http://dtrace.org/blogs/ahl/2012/04/24/btrace-dtrace-for-java-ish/ JAVA https://github.com/chrisa https://github.com/ahrens

统一客服消息返回错误:{errcode:43004,errmsg:require subscribe hint: [9Vv08633952]}

2019独角兽企业重金招聘Python工程师标准>>> 公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg":"require subscribe hint: [9Vv08633952]"} 场景:小程序使用公众号的服务消息,推送消息…