首先大致说一下栈这个数据结构,他是一个先进后出的结构,就好比家中摆盘子一样,洗好的盘子放到最上面,当要用的时候从最上面拿走(当然只是一般情况,你要是每次都从下面抽走盘子我也没办法)。
这样的话我们可以直接用前面学过的线性表来实现,但是链的哪边是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.栈和队列 栈和队列 ...

  2. 基本数据结构 - 栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

  3. 数据结构——栈与队列相关题目

    数据结构--栈与队列相关题目 232. 用栈实现队列 思路 225. 用队列实现栈 1.两个队列实现栈 2.一个队列实现栈 20. 有效的括号 思路 1047. 删除字符串中的所有相邻重复项 思路 1 ...

  4. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  5. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构

    数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...

  6. 数据结构栈与队列的应用之汽车轮渡问题——自己的一些理解

    本题摘自王道数据结构栈与队列的应用的课后题,题目如下: 某汽车轮渡口,过江渡船每次能载10辆汽车过江.过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船,客车先于货车上船,且每上4辆客车, ...

  7. 数据结构——栈和队列

    目录 1.栈 1.1栈的基本概念 1.2栈的顺序存储实现 1.3共享栈 1.4栈的链式存储实现 1.5栈在括号匹配中的应用 1.6栈在表达式求值中的应用 1.6.1中.前.后缀表达式 1.6.2后缀表 ...

  8. 数据结构—栈和队列经典面试题

    栈和队列面试题: 实现一个栈,要求实现Push(出栈).Pop(入栈).Min(返回最小值)的时间复杂度为O(1) 使用两个栈实现一个队列 使用两个队列实现一个栈 元素出栈.入栈顺序的合法性.如入栈的 ...

  9. [数据结构]栈、队列和散列表

    参考:<漫画算法-小灰的算法之旅> 目录​​​​​​​ 1.栈 1.1栈的定义 1.2栈的基本操作 1.3栈的应用 2.队列 2.1队列的定义 2.2队列的基本操作 2.3队列的应用 3. ...

最新文章

  1. 学习IT技术你需要的是书?视频教程?还是老师?
  2. 使用递归的方式实现简易的二分法
  3. LeetCode Algorithm 543. 二叉树的直径
  4. linux内存管理简介,Linux操作系统的内存管理特性简介 (3)
  5. Shell脚本中函数返回值的用法笔记
  6. 数据库MySQL/mariadb知识点——数据类型
  7. cgo 调用dll Failed to load xxxxx.dll: The specified module could not be found.
  8. 新增数组_数组链表和List部分理解总结
  9. Halcon算法矫正镜头畸变
  10. vue官方webpack模版多个打包环境搭建
  11. 由大脑工作原理,探讨向菩萨求聪明的灵验的科学原理
  12. 中国各省名称+ 经纬度
  13. 软件测试书单/书籍推荐(整理更新中)
  14. 天正计算机命令大全,新手必看-史上最全CAD快捷键大全
  15. 复旦大学智能感知与无人系统实验室诚聘海内外超级博士后/博士后
  16. 人体反应测试仪 c语言,人体反应速度测试仪.doc
  17. 电容滤波电路电感滤波电路作用原理
  18. MIKE与SMS网格的区别
  19. Cyclecloud介绍以及使用指南
  20. python 稠密重建_毕业设计记录的三维重建2:CMVs密集点云重建,之,2cmvs,稠密,实现...

热门文章

  1. 为什么python对空格,缩进要求这么高?缩进稍微不对就报错!
  2. 深度学习有哪些经典数据集?
  3. 在机器人的眼里到底能看到什么,它们和人类的视觉系统有什么区别?
  4. 收藏 |《动手学深度学习》中文版PDF
  5. 【从零学习OpenCV 4】opencv_contrib扩展模块的安装
  6. 揭秘:深度网络背后的数学奥秘
  7. 如何判断轮廓是否为圆?
  8. Cracking the coding interview--Q2.2
  9. .NET : 再谈谈XML中的命名空间问题
  10. freetype和libiconv编译