-栈的定义

栈也称堆栈,是一种先进后出,删除和插入都在栈顶操作的线性表。

-栈的特性

先进后出,后进先出。基本操作只有两个:出栈(push)和进栈(pop)

-基本运算

初始化栈、判断空、入栈、出栈、读栈顶元素。

-栈种类

栈分为顺序栈与链式栈两种:顺序栈类似线性表,是数组的形式;而链式栈类似链表,用指针链接每个部分。

-顺序栈

#include <stdio.h>
#include <stdlib.h>
#define MAX 1024 //定义栈能容纳的大小
typedef int DataType;//存储数据类型为int //顺序栈储存结构
typedef struct
{DataType data[MAX];int top;
} Stack;//定义全局变量
Stack *s;//初始化栈
Stack * init()
{Stack * s;//申请指定空间的栈s = (Stack *)malloc(sizeof(Stack));s->top = -1;return s;
}//判断空
int empty(Stack *s){//如果为空返回1,否则返回0if (s->top == -1) return 1;else return 0;
}//入栈
int push(Stack *s,DataType x){if (s->top == MAX-1){printf("栈将溢出!");return 0;}s->top++;s->data[s->top] = x;return 1;
}//出栈
void pop(Stack *s){if (empty(s)){printf("栈已空!\n");}else{s->top--;}
}
//读栈顶元素
void readtop(Stack *s){if (!empty(s)){printf("%d\n", s->data[s->top]);}else{printf("栈已空!");return;}
}int main(){s = init();push(s, 1);//1入栈 push(s, 2);//2入栈 push(s, 3);//3入栈 readtop(s);//读取栈顶数据->3pop(s);//3出栈 readtop(s);//读取栈顶数据->2pop(s);//2出栈readtop(s);//读取栈顶数据->1pop(s);//1出栈 readtop(s);//此时栈已空,跳出提示词 pop(s);//此时栈已空,跳出提示词
}

运行结果:

-链式栈

#include <stdio.h>
#include <stdlib.h>
typedef int DataType;//存储数据类型为int
//定义栈结构的结点
typedef struct stack_node {DataType element;struct stack_node *next;
} node;typedef struct {node *top;
} stack;//进栈函数
void push(stack *sp, DataType element) {node *np;//创建新节点np = (node *)malloc(sizeof(node));np->element = element;//修改栈顶指针np->next = sp->top;sp->top = np;
}//出栈函数
DataType pop(stack *sp) {node *np;//将要出栈的结点指针np = sp->top;DataType c;//栈顶元素值c = np->element;sp->top = np->next;free(np);np = NULL;return c;
}//遍历输出函数
void read (stack sp) {stack temstack = {NULL};DataType tem;while (sp.top != NULL) {tem = pop(&sp);printf("%d\n", tem);push(&temstack, tem);}while (temstack.top != NULL) {tem = pop(&temstack);push(&sp, tem);}
}
int main() {stack s = {NULL};push(&s, 1);push(&s, 2);push(&s, 3);read(s);return 0;
}

运行结果:

队列

 队列基本操作与栈类似,区别是删除元素时根据先进先出原则。

-队列的特性

先进先出,后进后出。允许进行插入操作的一端称为队尾(rear),允许进行删除操作的一段称为队头(front)。

-代码

#include <stdio.h>
#include <stdlib.h>
#define MAX 50//队列类型的定义
typedef struct
{ElemType data[MAX];int front,rear;//front为队首指针  rear为队尾指针
}SqQueue; typedef int ElemType;
typedef SqQueue CSqQueue;//初始化运算
/*初始化运算得到一个空队列*/
int InitQueue(CSqQueue *Q)
{(*Q).front=0;(*Q).rear=0;return 0;
} //判空运算,队列Q为空返回1,否则返回0
int QueueEmpty(CSqQueue Q)
{if(Q.front==Q.rear)return 1;return 0;
}//判满运算
int QueueFull(CSqQueue Q)
{if((Q.rear+1)%MAX==q.front)return 1;return 0;
}//创建一个队列,创建成功返回1,创建失败返回0
int CreatQueue(CSqQueue *Q)
{int i,n;ElemType temp_e;printf("请输入你想要创建的队列的长度:\n");scanf("%d",&n);if(n>MAX)return -1;for(i=1;i<=n,i++){printf("请输入第%d个元素:\n",i); scanf("%d",&temp_e);EnQueue(Q,temp_e); }return 0;
}//返回队列长度
int QueueLength(CSqQueue Q)
{return (Q.rear-Q.front+MAX)%MAX;
}//返回队首元素的值
int GetHead(CSQqueue Q,ElemType *e)
{if(QueueEmpty(Q)){return-1;}*e=Q.data[Q.front];return 0;
}//入队的实现-队尾插入新元素
int EnQueue(CSqQueue *Q,ElemType *e)
{if(QueueEmpty(*Q)){return-1;}(*Q).data[(*Q).rear]=e;(*Q).rear=((*Q).rear+1)%MAX;return 0;
}//出队的实现-删除队首,并用变量e返回被删除元素
int DeQueue(CSqQueue *Q,ElemType *e)
{if(QueueEmpty(*Q)){return-1;}e=(*Q).data[(*Q).front)];(*Q).front=((*Q).front+1)%MAX;return 0;
}//打印运算的实现-输出队列Q
void ShowQueue(CSqQueue Q)
{ElemType temp_e;while (!=QueueEmpty(Q)){DeQueue(&Q,&temp_e);printf("%d",temp_e)}printf("\n");
}

3.20周记:栈和队列相关推荐

  1. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  2. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  3. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  4. 实习二 栈、队列和递归算法设计 (题目:停车场管理 )

    一.需求分析 1.每一组输入数据包括:汽车"到达"或"离去"信息.汽车牌照号码以 及到达或离去的时刻. 2.输出信息:若是车辆到达,则输出汽车在停车场内或便道上 ...

  5. 大话数据结构-栈与队列

    文章知识点来至于大话数据结构里边章节知识, 这篇主要介绍栈与队列在计算机中存储形式, 以及在某些算法领域中对栈和队列的相关应用.章节最后介绍了著名的逆波兰表达式, 以及通过算法来实现该表达式的运算过程 ...

  6. sdut 3333 数据结构实验之栈与队列六:下一较大值(二)

    数据结构实验之栈与队列六:下一较大值(二) Time Limit: 150MS Memory Limit: 8000KB Submit Statistic Discuss Problem Descri ...

  7. sdut-3332 数据结构实验之栈与队列五:下一较大值(一)

    数据结构实验之栈与队列五:下一较大值(一) Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Desc ...

  8. sdut 2134 数据结构实验之栈与队列四:括号匹配

    数据结构实验之栈与队列四:括号匹配 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descript ...

  9. 栈和队列应用之数制转换

    数制转换是将任意一个非负的十进制数转换为其他进制的数,一般的方法是采用辗转相除法.参考<C#数据结构> N          N/8        N%8 5142        642  ...

  10. 《大话数据结构》读书笔记-栈与队列

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 4.2栈的定义 4.2.1 栈的定义 4.2.2 进栈出栈变 ...

最新文章

  1. Delphi 2009 泛型容器单元(Generics.Collections)[1]: TListT
  2. 计算机网络·“存储-转发”式分组交换网
  3. apollo在Linux下读不到参数,Apollo的基本使用及常见问题
  4. ustc小道消息20220104
  5. Eclipse SVN插件检出Src下面的包变成了文件夹解决
  6. SpringCloud工作笔记047---FastJson解析多级JSON_FastJson解析嵌套JSON_FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换
  7. ESXi主机性能问题
  8. iOS:下载/创建证书
  9. 归一化相关系数相关匹配公式
  10. 华为云对象存储服务OBS教你一招轻松解决存储难题
  11. 微信小程序之----页面之间相互传递数据
  12. GMSL部分问题解答/含官方FAE解答
  13. 通配符掩码的应用 ACL 访问控制列表
  14. web2——影评网页
  15. Python程序员私活来源:大学同窗开公司,伸手就要爬资料
  16. C++(数据结构与算法):64---布隆过滤器(Bloom Filter)
  17. sts各版本下载地址
  18. Revit 二次开发 未能加载文件或程序集“Microsoft.Xaml.Behaviors”或它的某一个依赖项
  19. 百度知道负面信息怎么删除
  20. 3D空间中的点坐标转化为屏幕二维点坐标(一)

热门文章

  1. Ubuntu nginx 配置实例
  2. crontab 运行pyhon脚本
  3. python编程书籍1020python编程书籍_代写INFT 1020作业、Database作业代做、Java课程作业代写、c++,Python编程作业代做...
  4. maven 程序包不存在_有人说 Maven 很简单,我却被“伤害”过
  5. 概要设计 重要性_儿童户外游乐场应如何设计-户外游乐设备厂家【经验分享】...
  6. 随时找到数据流中的中位数
  7. sklearn 笔记整理:sklearn.mertics
  8. 机器学习笔记:Transformer
  9. R语言实战应用-基于R语言的对应分析
  10. 数据科学家们,请补齐你的短板,如何提升R语言编程能力