七、数据结构:线性表-栈(后进先出)
1、栈是一种先进后出的顺序表,和顺序表的区别是:顺序表可以操作任意元素,但是栈只能对栈顶元素进行操作,即后进先出原则。
2、栈的操作就只有入栈和出栈两个。
3、实现入栈和出栈
栈的栈顶用top标识,入栈时top加一,出栈时top减一,top为-1时表示栈空。
#include <stdio.h>
#define MAX 5int push(int *a,int top,int data){top = top +1;a[top] = data;return top;
}int pop(int *a,int top){int result;if(top == -1)return 0;printf("pop data:%d\n",a[top]);top = top-1;return top;
}int main(){int a[MAX];int top = -1;top = push(a,top,1);top = push(a,top,2);top = push(a,top,3);top = push(a,top,4);top = push(a,top,5);top = pop(a,top);top = pop(a,top);top = pop(a,top);top = pop(a,top);return 0;
}
3、链栈,即一个单链表只能先进先出。
需要注意的是链栈的栈顶在表头即第一个节点,入栈时将节点插入表头,出栈时删除表头节点。
“链栈实际上就是一个只能采用头插法插入或删除数据的链表。”
4、链栈的入栈和出栈。
#include <stdio.h>typedef struct QueueLink{struct QueueLink *next;int data;
}queueLink;//入栈
queueLink *push(queueLink *queue,int data){queueLink *new = (queueLink*)malloc(sizeof(queueLink)); //新建一个节点new->data = data; new->next = queue;queue = new; //把栈顶指针指向新节点return queue;
}//出栈
queueLink *pop(queueLink *queue){queueLink *tmp = queue;if(queue){ //如果queue为NULL,表示栈顶指向NULL,即栈为空printf("pop data:%d\n",queue->data);queue = queue->next; //把栈顶指针指向下一个节点free(tmp); //释放栈顶节点}return queue;
}int main(){queueLink *queue = NULL;queue = push(queue,1);queue = push(queue,2);queue = push(queue,3);queue = push(queue,4);queue = pop(queue);queue = pop(queue);queue = pop(queue);queue = pop(queue);queue = pop(queue); //此时出栈会发现栈为空queue = pop(queue); //此时出栈会发现栈为空return 0;
}
七、数据结构:线性表-栈(后进先出)相关推荐
- 2021-9-下旬 数据结构-线性表- 栈 -java代码实现(复习用)
import java.util.ArrayList; import java.util.List; //栈的本质就是线性表,因为总在线性表的表尾端进行操作(出栈入栈),其重要特性为FILO先进后出 ...
- c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc
数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...
- 数据结构-线性表之用队列实现栈用栈实现队列
文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...
- 数据结构——线性表(三)
数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...
- 数据结构-线性表-思维导图+小结
数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...
- 数据结构线性表基本操作
数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...
- 数据结构-线性表之带头结点的双向循环链表
文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...
- 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)
[简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT List { 数据 ...
- 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?
王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)
- 数据结构-线性表(严书代码实现)
数据结构-线性表的顺序表示代码 //头文件内容实现 #ifndef SEQLIST_H_INCLUDED #define SEQLIST_H_INCLUDED #include<string.h ...
最新文章
- 面对千亿客服市场:曾经人工当道,如今AI为王
- 沫沫金:Java快速合并两个数组【绝技】
- 安装composer出现链接补上的问题
- CF1375G. Tree Modification(贪心,黑白染色)
- 通信工程施工图案例分析
- 当我们在谈数字化转型的时候,我们在谈什么?
- 商丘高中计算机考试成绩查询系统,河南省中招考生服务平台2019商丘中考成绩查询系统入口...
- cuda linux 算力_华为AI再进化,CANN 3.0释放算力狂魔
- mongo java aggregate_java使用spring + mongo进行Aggregation聚合查询
- thread.sleep会释放锁吗_面试 LockSupport.park()会释放锁资源吗?
- 时间戳转换为时间格式,时间格式转换为时间戳
- 用matlab解根3乘根2,数值计算课后习题答案--石瑞民.doc
- 多维灰色预测模型的一点改进
- 论文复现:土卫六(Titan)大气参数计算
- 使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
- 2015年3月CCF软考试题
- 基于angular上传图片并能对图片裁剪,放大缩小,压缩size及在图片上添加文字等编辑操作,并能手动限制上传图片数量
- python3模拟登录知乎
- 电商网站数据库设计好文章分享
- MD5 加密安全吗?