栈的基本概念及其描述

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

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

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语言)相关推荐

  1. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  2. C语言 数据结构 顺序栈的实现 进栈 出栈 初始化

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.代码实现 前言 顺序栈是栈的顺序实现.顺序栈是指利用顺序存储结构实现的栈.采用地址连续的存储空间(数组)依次存储栈 ...

  3. 数据结构-顺序栈、链栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  4. 数据结构 :: 顺序栈与链式栈的设计与实现

    数据结构 :: 双链表的设计与实现 说明:本文属于读书笔记.笔者将以讲述的方式表达全片文章.故文中提到的某些字词是非正式术语,只是笔者本人的理解性词语. 前言:本文将对顺序栈与链式栈进行设计与实现!其 ...

  5. c语言顺序栈完整程序,顺序栈的基本操作(C语言)

    由于现在只学了C语言所以就写这个C语言版的栈的基本操作 这里说一下 :网上和书上都有这种写法 int InitStack(SqStack &p) &p是取地址  但是这种用法好像C并不 ...

  6. 数据结构--顺序栈和链式栈

    http://www.cnblogs.com/jingliming/p/4602458.html 栈是一种限定只在表尾进行插入或删除操作,栈也是线性表表头称为栈的底部,表尾称为栈的顶部,表为空称为空栈 ...

  7. 顺序栈的基本操作c语言源代码,顺序栈的栈基本操作(C语言版)

    1 #include 2 #include 3 #define STACK_INIT_SIZE 100//储存空间初始分配量 4 #define STACKINCREMENT 10//存储空间分配增量 ...

  8. 天勤考研数据结构———顺序栈、链栈操作

    typedef struct{                //定义顺序栈     int data[maxsize];     int top;//定义栈顶指针 }SqStack; void in ...

  9. 严蔚敏版数据结构——顺序栈

    其实也是顺序表的一种特殊的操作,实际操作个人觉得要比顺序表还简单.上代码看看: #include<stdio.h> #include<malloc.h> #define OK ...

  10. 数据结构-顺序表基本操作(C语言实现)

    参考书:王道考研数据结构 //函数的声明 SqList InitList(l);                                    //初始化一个顺序表 void PrintfLi ...

最新文章

  1. Ubuntu Server 14.04 下root无法ssh登陆
  2. Java获取近七天的数据条数,及页面实现折线图(附前后端代码)
  3. MATLAB学习(一)
  4. MySQL_前缀索引_建立
  5. 办公:Office快捷键之王,这个键应该没人不服!
  6. c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?
  7. assertion python_【Python】断言功能Assertion
  8. 电阻元件、电感元件、电容元件
  9. root 账号不能登录的解决方法
  10. ArcGIS插件安装通用问题汇总
  11. WebGL着色器变量(attribute、uniform和varying)
  12. 有关企业合并时的10条IT措施
  13. 4G,64bit,PAE
  14. workerman创建wss服务
  15. 相位相关影像匹配算法
  16. 您的云,您做主:Google Distributed Cloud Hosted 全面可用
  17. AIGC和ChatGPT的区别
  18. iPad 使用技巧:备忘录
  19. 无功补偿器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. win10笔记本电脑找不到WLAN

热门文章

  1. web前端培训:CSS中单行文本溢出显示省略号的方法
  2. Msql的DML、DDL、DCL的区别
  3. 数据结构:二分查找 java
  4. Josephus Problem的详细算法及其Python, Java语言的实现
  5. JavaScript基础(一) 数据类型
  6. Maven工程引入jar包(转)
  7. NHibernate和Cuyahoga(二)(翻译):
  8. php composer 无法下载,php – composer无法安装laravel / passport
  9. django 设置外键_django2.0前后版本定义外键和一对一关系的差别
  10. java开心消消乐代码_今晚请屏住呼吸,开心消消乐拍电影了!