【数据结构】顺序栈的实现(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;
}
【数据结构】顺序栈的实现(C语言)相关推荐
- 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)
摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...
- C语言 数据结构 顺序栈的实现 进栈 出栈 初始化
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码实现 前言 顺序栈是栈的顺序实现.顺序栈是指利用顺序存储结构实现的栈.采用地址连续的存储空间(数组)依次存储栈 ...
- 数据结构-顺序栈、链栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- 数据结构 :: 顺序栈与链式栈的设计与实现
数据结构 :: 双链表的设计与实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 前言:本文将对顺序栈与链式栈进行设计与实现!其 ...
- c语言顺序栈完整程序,顺序栈的基本操作(C语言)
由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址 但是这种用法好像C并不 ...
- 数据结构--顺序栈和链式栈
http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈 ...
- 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)
1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...
- 天勤考研数据结构———顺序栈、链栈操作
typedef struct{ //定义顺序栈 int data[maxsize]; int top;//定义栈顶指针 }SqStack; void in ...
- 严蔚敏版数据结构——顺序栈
其实也是顺序表的一种特殊的操作,实际操作个人觉得要比顺序表还简单.上代码看看: #include<stdio.h> #include<malloc.h> #define OK ...
- 数据结构-顺序表基本操作(C语言实现)
参考书:王道考研数据结构 //函数的声明 SqList InitList(l); //初始化一个顺序表 void PrintfLi ...
最新文章
- Ubuntu Server 14.04 下root无法ssh登陆
- Java获取近七天的数据条数,及页面实现折线图(附前后端代码)
- MATLAB学习(一)
- MySQL_前缀索引_建立
- 办公:Office快捷键之王,这个键应该没人不服!
- c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?
- assertion python_【Python】断言功能Assertion
- 电阻元件、电感元件、电容元件
- root 账号不能登录的解决方法
- ArcGIS插件安装通用问题汇总
- WebGL着色器变量(attribute、uniform和varying)
- 有关企业合并时的10条IT措施
- 4G,64bit,PAE
- workerman创建wss服务
- 相位相关影像匹配算法
- 您的云,您做主:Google Distributed Cloud Hosted 全面可用
- AIGC和ChatGPT的区别
- iPad 使用技巧:备忘录
- 无功补偿器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- win10笔记本电脑找不到WLAN
热门文章
- web前端培训:CSS中单行文本溢出显示省略号的方法
- Msql的DML、DDL、DCL的区别
- 数据结构:二分查找 java
- Josephus Problem的详细算法及其Python, Java语言的实现
- JavaScript基础(一) 数据类型
- Maven工程引入jar包(转)
- NHibernate和Cuyahoga(二)(翻译):
- php composer 无法下载,php – composer无法安装laravel / passport
- django 设置外键_django2.0前后版本定义外键和一对一关系的差别
- java开心消消乐代码_今晚请屏住呼吸,开心消消乐拍电影了!