数据结构[栈与队列]的基本操作
首先大致说一下栈这个数据结构,他是一个先进后出的结构,就好比家中摆盘子一样,洗好的盘子放到最上面,当要用的时候从最上面拿走(当然只是一般情况,你要是每次都从下面抽走盘子我也没办法)。
这样的话我们可以直接用前面学过的线性表来实现,但是链的哪边是top呢?仔细分析一下就会发现如果我们用链的结尾作为top,我们删除它(因为这是一个单链表,指针只指向下一个元素),所以当我们用结尾作为top,删除元素后,找不到上一个元素的地址在哪。
struct Snode{int date;Snode *next;
};
typedef Snode* Stack;
栈的基本操作:
1.创建栈的头节点
Stack creat(){Stack s;s=new Snode;s->next=NULL;return s;
}
2.判断是否为空栈
bool isempty(Stack s){return s->next==NULL;
}
3.插入元素
void push(int val,Stack s){Stack node;node=new Snode;node->date=val;node->next=s->next;s->next=node;
}
4.删除元素并返回删除元素的值
int pop(Stack s){ Stack firstval;int val;if(isempty(s)){cout<<"堆栈空"<<endl;return NULL;}else{firstval=s->next;s->next=firstval->next;val=firstval->date;free(firstval);return val;}
}
以上就是堆栈的基本操作了。
队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
1.创建操作
struct node{int date;node *next;
};
struct Qnode{node *rear;node *front;
};
typedef Qnode *Queue;Queue creat(){Queue q;q=new Qnode;q->front=q->rear=NULL;return q;
}
2.插入操作
void push(int val,Queue q){node *p;p=new node;p->date=val;p->next=NULL;if(q->rear==NULL){ //这里特别重要!!q->rear=p;q->front=p;return ;}else{q->rear->next=p;q->rear=p;}return ;
}
3.出队操作
void del(Queue q){ //出队node* frontcell;int frontdate;if(q->front==NULL) {cout<<"empty"<<endl;return ;}frontcell=q->front;if(q->front==q->rear){q->front=q->rear=NULL;}else{q->front=q->front->next;}frontdate=frontcell->date;free(frontcell);cout<<frontdate<<endl;return ;
}
4.查看其中元素
void show(Queue q){if(q->front==NULL){cout<<"empty"<<endl;return ;}node *p;p=q->front;while(p!=NULL){printf("%d ",p->date);p=p->next;}cout<<endl;return ;
}
5.返回队首元素
int readfront(Queue q){if(q->front==NULL){return 0;}cout<<q->front->date<<endl;return 1;
}
数据结构[栈与队列]的基本操作相关推荐
- 第十章 基本数据结构——栈和队列
摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...
- 基本数据结构 - 栈和队列
摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...
- 数据结构——栈与队列相关题目
数据结构--栈与队列相关题目 232. 用栈实现队列 思路 225. 用队列实现栈 1.两个队列实现栈 2.一个队列实现栈 20. 有效的括号 思路 1047. 删除字符串中的所有相邻重复项 思路 1 ...
- java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)
实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...
- 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构
数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...
- 数据结构栈与队列的应用之汽车轮渡问题——自己的一些理解
本题摘自王道数据结构栈与队列的应用的课后题,题目如下: 某汽车轮渡口,过江渡船每次能载10辆汽车过江.过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船,客车先于货车上船,且每上4辆客车, ...
- 数据结构——栈和队列
目录 1.栈 1.1栈的基本概念 1.2栈的顺序存储实现 1.3共享栈 1.4栈的链式存储实现 1.5栈在括号匹配中的应用 1.6栈在表达式求值中的应用 1.6.1中.前.后缀表达式 1.6.2后缀表 ...
- 数据结构—栈和队列经典面试题
栈和队列面试题: 实现一个栈,要求实现Push(出栈).Pop(入栈).Min(返回最小值)的时间复杂度为O(1) 使用两个栈实现一个队列 使用两个队列实现一个栈 元素出栈.入栈顺序的合法性.如入栈的 ...
- [数据结构]栈、队列和散列表
参考:<漫画算法-小灰的算法之旅> 目录 1.栈 1.1栈的定义 1.2栈的基本操作 1.3栈的应用 2.队列 2.1队列的定义 2.2队列的基本操作 2.3队列的应用 3. ...
最新文章
- 学习IT技术你需要的是书?视频教程?还是老师?
- 使用递归的方式实现简易的二分法
- LeetCode Algorithm 543. 二叉树的直径
- linux内存管理简介,Linux操作系统的内存管理特性简介 (3)
- Shell脚本中函数返回值的用法笔记
- 数据库MySQL/mariadb知识点——数据类型
- cgo 调用dll Failed to load xxxxx.dll: The specified module could not be found.
- 新增数组_数组链表和List部分理解总结
- Halcon算法矫正镜头畸变
- vue官方webpack模版多个打包环境搭建
- 由大脑工作原理,探讨向菩萨求聪明的灵验的科学原理
- 中国各省名称+ 经纬度
- 软件测试书单/书籍推荐(整理更新中)
- 天正计算机命令大全,新手必看-史上最全CAD快捷键大全
- 复旦大学智能感知与无人系统实验室诚聘海内外超级博士后/博士后
- 人体反应测试仪 c语言,人体反应速度测试仪.doc
- 电容滤波电路电感滤波电路作用原理
- MIKE与SMS网格的区别
- Cyclecloud介绍以及使用指南
- python 稠密重建_毕业设计记录的三维重建2:CMVs密集点云重建,之,2cmvs,稠密,实现...