数据结构之栈(后进先出表)
栈(Stack)是一种特殊的线性表,其插入和删除操作均在表的一端进行,是一种运算受限的线性表
栈顶(top)是栈中允许插入和删除的一端。
栈底(bottom)是栈顶的另一端
顺序栈:
#include<stdio.h>
#include<stdlib.h>
#define Stack_Init_Size 100 //栈容量
#define StackIncrement 10 //栈增量
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef int Status;
typedef struct {SElemType *base;SElemType *top;int stacksize;
}SqStack;
Status InitSqStack(SqStack* S)
{S->base = (SElemType*)malloc(Stack_Init_Size * sizeof(SElemType));S->top = S->base;S->stacksize = Stack_Init_Size;return OK;
}
Status Push(SqStack* s, SElemType e)
{if (s->top - s->base >= s->stacksize){s->base = (SElemType*)realloc(s->base,((int)s->stacksize + StackIncrement) * sizeof(SElemType));if (s->base==NULL)exit(OVERFLOW);s->top = s->base + s->stacksize;s->stacksize += StackIncrement;}*(s->top) = e;s->top++;return OK;
}
SElemType Pop(SqStack* s)
{SElemType e;if (s->top == s->base){return ERROR;}else{s->top--;//注意出栈是先--e = *(s->top);return e;}
}
Status Destroy(SqStack* S)
{free(S->base);S->base = NULL;S->top = NULL;S->stacksize = 0;return OK;
}
Status Clear(SqStack* S)
{S->top = S->base;return OK;
}
Status Is_empty(SqStack* S)
{if (S->top == S->base)return TRUE;elsereturn FALSE;
}
int Length(SqStack* S)
{return (int)(S->top - S->base);
}
void StackTraverse(SqStack* s)
{SElemType* p;p = s->top;while (p!=s->base){ p--;printf("%d\n", *(p));}
}
SElemType GetTop(SqStack* s)
{s->top--;return *s->top;
}
int main()
{SqStack* s=(SqStack*)malloc(sizeof(SqStack));InitSqStack(s);for (int i = 0; i < 10; ++i){Push(s, i);}printf("长度: %d\n", Length(s));for (int i = 0; i < 10; ++i){printf("%d\n", Pop(s));}return 0;
}
链式栈
#include<stdio.h>
#include<stdlib.h>
#define Stack_Init_Size 100 //栈容量
#define StackIncrement 10 //栈增量
#define OVERFLOW -1
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int Status;
typedef int SElemType;
typedef int Status;
typedef struct SNode {SElemType data;struct SNode* next;
}SNode,*LinkStack;
LinkStack InitStack()//注意这个初始化方式!!!!!!
{LinkStack s = (SNode*)malloc(sizeof(SNode));if (!s)exit(OVERFLOW);s->next = NULL;return s;
}
void Push(LinkStack s, SElemType e)
{LinkStack p = (SNode*)malloc(sizeof(SNode));if (p == NULL)exit(OVERFLOW);p->data = e;p->next = NULL;p->next = s->next;s->next=p;//与单链表的头插法相似
}
SElemType Pop(LinkStack s)
{LinkStack q;q = s->next;SElemType e= q->data;s->next = q->next; free(q);//删除单链表的第一个元素return e;
}
void DestroyStack(LinkStack s)
{free(s);
}
void ClearStack(LinkStack s)
{s->next = NULL;
}
Status StackEmpty(LinkStack s)
{if (s->next == NULL)return TRUE;else{return FALSE;}
}
int StackLength(LinkStack s)
{int i = 0;SNode* p = s->next;while (p!=NULL){i++; p = p->next;}return i;
}
SElemType GetTop(LinkStack l)
{return l->next->data;
}
void StackTravers(LinkStack s)
{SNode* p = s->next;while (p != NULL){printf("%d ", p->data);p = p->next;}
}
int main()
{LinkStack s = (SNode*)malloc(sizeof(SNode));s=InitStack();for (int i = 0; i < 10; i++){Push(s, i);}Pop(s);StackTravers(s);return 0;
}
数据结构之栈(后进先出表)相关推荐
- 顺序表输入栈元素c语言,C语言数据结构之栈简单操作
C语言数据结构之栈简单操作 实验: 编写一个程序实现顺序栈的各种基本运算,并在此基础上设计一个主程序,完成如下功能: (1)初始化顺序栈 (2)插入元素 (3)删除栈顶元素 (4)取栈顶元素 (5)遍 ...
- 数据结构-栈(先进后出表)
//数据结构-栈(先进后出表) #include<stdio.h> #define MaxSize 100 typedef char ElemType; typedef struct { ...
- c++怎么实现数字数组的删除数字_C/C++数据结构:栈结构解析,最简单解析,让你一遍就会...
上一章节针对于C语言最基本的数据结构链式结构体做了解析,不清楚的可以回顾一下.本章节主要针对于C语言的基础数据结构栈做以解析. 数据结构之栈 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅 ...
- 数据结构之 栈 (Python 版)
数据结构之 栈 (Python 版) -- 利用线性表实现栈 栈的特性: 后进先出 基于顺序表实现栈 1 class SStack(): 2 3 ''' 4 基于顺序表 实现的 栈类 5 ''' 6 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- 数据结构--链栈的c语言实现(超详细注释/实验报告)
数据结构–链栈的c语言实现(超详细注释/实验报告) 知识小回顾 栈(Stack)作为一种限定性线性表,是将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入.删除操作的一端成为栈顶( ...
- 数据结构:栈(Stack)
数据结构:栈(Stack) 栈是一种数据结构,是一种只能在一端进行添加和删除,受限制的线性表.先进入的元素被压入栈顶,最后进入的元素在栈顶,又称LIFO(后进先出)线性表. 栈需要下面几种操作 入栈 ...
- Java数据结构之栈详解
栈的定义: 栈(stack)是一种用于存储数据的简单数据结构.栈一个有序线性表,只能在表的一端(PS:栈顶)执行插人和删除操作.最后插人的元素将被第一个删除.所以,栈也称为后进先出(Last In F ...
- c语言堆栈基本代码入栈出栈_C语言实现常用数据结构:栈-顺序栈实现(第6篇)...
栈 栈是一种特殊的线性表,其特性是仅能在表尾进行插入或删除的操作,栈中元素的操作是按照后进先出的原则进行,因此栈又称为后进先出线性表(Last In First Out,LIFO数据结构).栈顶:表尾 ...
- 数据结构习题——栈和队列(二)
第3章 栈和队列 一.填空题 1. 线性表.栈和队列都是 线性 结构,可以在线性表的 任何 位置插入和删除元素:对于栈只能在 栈顶 插入和删除元素:对于队列只能在 队尾 插入和 队头 删除元 ...
最新文章
- 【mDNS】本地DNS解析协议
- Link Cut Tree 学习笔记
- Myeclipse编辑器简单使用整理
- いちがつ(2017/1)
- java pingpong_面试题。线程pingpong的输出问题
- 高性能Javascript HTML集合访问的学习笔记
- python自动部署环境_在 CentOS 上初始化 Python 环境的自动部署脚本
- postgresql获取表最后更新时间(通过触发器将时间写入另外一张表)
- Ubuntu安装GoogleTest框架并测试C++代码
- CVPR 2017精彩论文解读:综合使用多形态核磁共振数据的3D生物医学图像分割方法 | 分享总结...
- Nagios社区真有意思
- 安防意识增强 澳洲迈向新发展
- 职高计算机专业个人鉴定范文大全,职高个人自我鉴定300字左右
- 从这里开始你的游戏黑客入门的之旅吧
- Kodi+Alist v3 挂载阿里云盘他人分享链接打造在线影视库
- logrus固定当天日志文件名称源码修改
- 一个中专生:我在华为面试的真实经历,转
- 汉语拼音的模糊音扩展(用于搜索纠错)
- 深度ip转换器手机版app_一键清理全能版app下载-一键清理全能版app手机版 v1.0.0...
- 【学习笔记】兄弟连Linux教程摘要
热门文章
- 【心田花开】三年级语文上册南宋古诗鉴赏
- 面对互联网风口下的人口老龄化,AI智能如何做好医疗健康管理?
- 4k笔记本刺眼睛_2020戴尔笔记本怎么选?哪个系列好?附5款高销量戴尔笔记本电脑型号推荐!【超高性价比】...
- 阿里easyexcel通过模板导出excel
- MSCode微服务平台框架基于SpringCloud、SpringCloud Alibaba、SpringBoot和Activiti7工作流,快速开发办公OA、CRM、ERP、电商、信息管理等业务系统
- panda3d 键盘移动场景
- 电脑只有浏览器可以上网其他软件都无法联网怎么办?
- 手机游戏《魔塔》实现细节——(1)需求收集
- 记一次组装电脑的经历
- [Ynoi2019]魔法少女网站