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;
}

七、数据结构:线性表-栈(后进先出)相关推荐

  1. 2021-9-下旬 数据结构-线性表- 栈 -java代码实现(复习用)

    import java.util.ArrayList; import java.util.List; //栈的本质就是线性表,因为总在线性表的表尾端进行操作(出栈入栈),其重要特性为FILO先进后出 ...

  2. c语言用两个栈构造队列伪码,数据结构习题线性表栈队列.doc

    数据结构习题线性表栈队列 线性表(58) 1. 在单链表.双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?若可以,其时间复杂度各为多少? 2.设线性表的 ...

  3. 数据结构-线性表之用队列实现栈用栈实现队列

    文章目录 **********用队列实现栈 一:思路 二:实现 (1)结构体定义 (2)初始化和销毁 (3)进"栈" (4)出"栈" 三:代码 ******** ...

  4. 数据结构——线性表(三)

    数据结构--线性表(三) 作者:黑衣侠客 一.线性表的定义 线性表,从名字来看,可以发现,是具有像线一样性质的表 线性表:零个或多个数据元素的有限序列. 首先,它是一个序列,也就是说,元素之间是有顺序 ...

  5. 数据结构-线性表-思维导图+小结

    数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...

  6. 数据结构线性表基本操作

    数据结构线性表基本操作 基本内容 线性表的顺序表示和实现 线性表的顺序存储表示 顺序表中基本操作的实现 1.顺序表的初始化 2.取值 3.查找 4.插入 5.删除 线性表的链式表示和实现 单链表的定义 ...

  7. 数据结构-线性表之带头结点的双向循环链表

    文章目录 前言 实现 (1)结构定义 (2)基本函数 (3)操作实现 测试 代码 前言 链表的类型有很多种(根据带头或不带头,循环或非循环等等),但是我们重点研究的只有两种,一种结构非常简单是无头单向 ...

  8. 数据结构摧毁线性表用c语言,[简述]数据结构-线性表(c语言实现)

    [简述]数据结构-线性表(c语言实现)second60 20180422 1. 线性表的定义 线性表是具有相同特性的数据元素的一个有限序列. 2. 线性表抽象数据类型描述 ADT  List { 数据 ...

  9. 王道数据结构线性表:有读者认为直接去掉p结点会造成断链?

    王道数据结构线性表:有读者认为直接去掉p结点会造成断链? 我用图解的方式来说明一下,文字有点多,看起来比较眼疼,但是内容不多,希望能对你有帮助. 书上的代码 解释 (ps:对上面解释的一点补充↓)

  10. 数据结构-线性表(严书代码实现)

    数据结构-线性表的顺序表示代码 //头文件内容实现 #ifndef SEQLIST_H_INCLUDED #define SEQLIST_H_INCLUDED #include<string.h ...

最新文章

  1. 面对千亿客服市场:曾经人工当道,如今AI为王
  2. 沫沫金:Java快速合并两个数组【绝技】
  3. 安装composer出现链接补上的问题
  4. CF1375G. Tree Modification(贪心,黑白染色)
  5. 通信工程施工图案例分析
  6. 当我们在谈数字化转型的时候,我们在谈什么?
  7. 商丘高中计算机考试成绩查询系统,河南省中招考生服务平台2019商丘中考成绩查询系统入口...
  8. cuda linux 算力_华为AI再进化,CANN 3.0释放算力狂魔
  9. mongo java aggregate_java使用spring + mongo进行Aggregation聚合查询
  10. thread.sleep会释放锁吗_面试 LockSupport.park()会释放锁资源吗?
  11. 时间戳转换为时间格式,时间格式转换为时间戳
  12. 用matlab解根3乘根2,数值计算课后习题答案--石瑞民.doc
  13. 多维灰色预测模型的一点改进
  14. 论文复现:土卫六(Titan)大气参数计算
  15. 使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)
  16. 2015年3月CCF软考试题
  17. 基于angular上传图片并能对图片裁剪,放大缩小,压缩size及在图片上添加文字等编辑操作,并能手动限制上传图片数量
  18. python3模拟登录知乎
  19. 电商网站数据库设计好文章分享
  20. MD5 加密安全吗?

热门文章

  1. 旅行家算法(贪心算法)
  2. loadruner分析时各种图的认识
  3. Centos 安装 KVM虚拟化工具 超云服务器 VMware
  4. 天地超云高温一体机的耐热秘诀
  5. 人工智能帮助警方监控社交媒体,会不会太过分了?
  6. 《国内十大中文博客托管网站排行榜》
  7. Openwrt/lede软路由设置为ap模式
  8. Verion 9 of Highlight.js has reached EOL
  9. 计算机win7内容已满,win7c盘满了用了50G了怎么办
  10. 峰会/论坛现场签约怎么签?君子签提供区块链电子签约技术支持