数据结构之堆栈与队列

堆栈与队列是两种重要的基础数据结构,一个是先入后出,一个是先入先出,有着广泛的应用,本文分别使用数组与链表实现堆栈与队列

顺序存储方式实现堆栈

#define MaxSize 20
#define ERROR -1
typedef struct {int Data[MaxSize];int Top;
} Stack;Stack *CreateStack( int maxSize)//: 生成空堆栈,其最大长度为MaxSize;
{Stack *s=(Stack*)malloc(sizeof(Stack)*maxSize);s->Top=-1;return s;
}
int IsFull( Stack *S, int maxSize)//:判断堆栈S是否已满;
{if (S->Top==maxSize-1){return 1;}else{return 0;}
}
void Push( Stack *S, int item )//:将元素item压入堆栈;
{if (S->Top==MaxSize-1){printf("the stack is full");return;}else{S->Data[++(S->Top)]=item;return;}}
int IsEmpty ( Stack *S )//:判断堆栈S是否为空;
{if (S->Top=-1){return 1;}else{return 0;}
}
int Pop( Stack *S )//:删除并返回栈顶元素;
{if (S->Top==-1){printf("the stack is empty");return ERROR;}else{return S->Data[(S->Top)--];}
}void show(Stack *s)
{int i;for(i=0;i<=s->Top;i++){printf("%d ",s->Data[i]);}
}void main()
{int a,b;Stack *s=CreateStack(MaxSize);while (1){printf("please enter your order:");scanf("%d",&a);switch (a){case 1:scanf("%d",&b);Push(s,b);break;case 2:Pop(s);break;case 3:show(s);break;case 4:exit(0);break;default:break;}}}

堆栈

链式堆栈

typedef struct Node{int Data;struct Node *Next;
} LinkStack;LinkStack *CreateStack()
{LinkStack *s=(LinkStack*)malloc(sizeof(LinkStack));s->Next=NULL;return s;
}int IsEmpty(LinkStack *s)
{return (s->Next==NULL);
}void Push( int item, LinkStack *S )
{LinkStack *TmpCell;TmpCell=(LinkStack*)malloc(sizeof(LinkStack));TmpCell->Data=item;TmpCell->Next=S->Next;S->Next=TmpCell;}int pop(LinkStack *s)
{LinkStack *firstItem;int topNum;if (IsEmpty(s)){printf("stack is empty");return NULL;}firstItem=s->Next;s->Next=firstItem->Next;topNum=firstItem->Data;free(firstItem);return topNum;}
void show(LinkStack *s)
{s=s->Next;while (s){printf("%d ",s->Data);s=s->Next;}
}void main()
{int a,b;LinkStack *s=CreateStack();while (1){printf("please enter your order:");scanf("%d",&a);switch (a){case 1:scanf("%d",&b);Push(b,s);break;case 2:pop(s);break;case 3:show(s);break;case 4:exit(0);break;default:break;}}
}

堆栈

顺序存储队列

#define MaxSize 20
#define ERROR -1
typedef struct {int Data[ MaxSize ];int rear;int front;
} Queue;void AddQ( Queue *PtrQ, int item)
{if ((PtrQ->rear+1)%MaxSize==PtrQ->front){printf("the queue is full");}else{PtrQ->rear=(PtrQ->rear+1)%MaxSize;PtrQ->Data[PtrQ->rear]=item;}
}int DeleteQ ( Queue *PtrQ )
{if (PtrQ->front==PtrQ->rear){printf("the queue is empty");}else{PtrQ->front=(PtrQ->front+1)%MaxSize;return PtrQ->Data[PtrQ->front-1];}
}
void show(Queue *PtrQ)
{int i;for(i=PtrQ->front+1;i<=PtrQ->rear;i++){printf("%d ",PtrQ->Data[i%MaxSize]);}
}void main()
{int a,b;Queue *q=(Queue*)malloc(sizeof(Queue));q->front=-1;q->rear=-1;while (1){printf("please enter your order:");scanf("%d",&a);switch (a){case 1:scanf("%d",&b);AddQ(q,b);break;case 2:DeleteQ(q);break;case 3:show(q);break;case 4:exit(0);break;default:break;}}
}

队列

链式队列

#define ERROR -1
typedef struct Node{int  Data;struct Node *Next;
}QNode;
typedef struct { /* 链队列结构 */QNode *rear; /* 指向队尾结点 */QNode *front; /* 指向队头结点 */
} LinkQueue;LinkQueue* AddQuee(LinkQueue *PtrL,int item)
{QNode *node;node=PtrL->rear;if (PtrL->front==NULL){QNode *q=(QNode*)malloc(sizeof(QNode));q->Next=NULL;q->Data=item;PtrL->front=q;PtrL->rear=q;return PtrL;}else{QNode *q=(QNode*)malloc(sizeof(QNode));q->Next=NULL;q->Data=item;node->Next=q;PtrL->rear=q;return PtrL;}
}int DeleteQ ( LinkQueue *PtrQ )
{QNode *firstNode;int NodeItem;if (PtrQ->front==NULL){printf("queue is empty");return ERROR;}firstNode=PtrQ->front;if (PtrQ->front==PtrQ->rear){PtrQ->front=PtrQ->rear=NULL;}else{PtrQ->front=PtrQ->front->Next;}NodeItem=firstNode->Data;free(firstNode);return NodeItem;
}void show(LinkQueue *q)
{QNode *node;node=q->front;while (node){printf("%d ",node->Data);node=node->Next;}
}void main()
{int a,b;LinkQueue *q=(LinkQueue*)malloc(sizeof(LinkQueue));q->front=NULL;q->rear=NULL;while (1){printf("please enter your order:");scanf("%d",&a);switch (a){case 1:scanf("%d",&b);q=AddQuee(q,b);break;case 2:DeleteQ(q);break;case 3:show(q);break;case 4:exit(0);break;default:break;}}
}

队列

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle修改表空间大小

使用Oracle10g建立数据库后&#xff0c;向数据库中导入了部分数据&#xff0c;第二天继续向数据库中导入数据表时发生错误&#xff1a; 查了很多资料发现原来是Oracle表空间限制&#xff0c;导致无法继续导入数据的原因。如果在建立数据库时没有设置&#xff0c; Oracle 默认的…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 4丨员工薪水中位数【难度困难】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

2018中国民营企业500强榜单

来源&#xff1a;央视财经、先进制造业由全国工商联和辽宁省人民政府共同主办的2018中国民营企业500强峰会29日在沈阳召开&#xff0c;会上发布了2018中国民营企业500强榜单和《2018中国民营企业500强调研分析报告》。华为投资控股有限公司、苏宁控股集团有限公司、正威国际集团…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 5丨至少有5名直接下属的经理【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

全球数字经济十大发展趋势

来源&#xff1a;CIE智库摘要&#xff1a;当前&#xff0c;信息网络技术加速创新&#xff0c;以数字化的知识和信息作为关键生产要素的数字经济蓬勃发展&#xff0c;新技术、新业态、新模式层出不穷&#xff0c;成为“后国际金融危机”时代全球经济复苏的新引擎。当前&#xff…

数据结构之二叉树的遍历

二叉树的遍历分为前序遍历&#xff0c;中序遍历&#xff0c;后序遍历&#xff0c;层序遍历&#xff0c;在本文中&#xff0c;前三种由递归实现&#xff0c;层序遍历由队列实现。 #include "stdio.h" #include "stdlib.h" #include "windows.h" …

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 5丨员工奖金【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

从换脸到换姿势,AI 在图像处理的道路上越走越魔幻

来源&#xff1a;专知加州大学伯克利分校的研究人员&#xff0c;近日在著名预印本网站 arXive 上&#xff0c;发布了最新的图像迁移成果&#xff1a;人体姿势和舞蹈动作迁移。旨在把专业舞蹈演员的动作迁移到不会跳舞的人身上&#xff0c;算法输出流畅&#xff0c;还原度极高。…

sql中的并、交、差

⑸ 集合运算连接 有时候&#xff0c;用户希望在SQL查询中利用关系代数中的集合运算&#xff08;并、交、差&#xff09;来组合关系&#xff0c;SQL为此提供了相应的运算符&#xff1a;UNION、INTERSECT、EXCEPT(oracle的minus?)&#xff0c;分别对应于集合运算的∪、∩、-。它…

C语言实现大数据除法

本题要求计算A/B&#xff0c;其中A是不超过1000位的正整数&#xff0c;B是1位正整数。你需要输出商数Q和余数R&#xff0c;使得A B * Q R成立。 输入格式&#xff1a; 输入在1行中依次给出A和B&#xff0c;中间以1空格分隔。 输出格式&#xff1a; 在1行中依次输出Q和R&a…

每日一道题,划水有意义,看我不卷死你们(评论送书)

&#x1f345; 作者主页&#xff1a;不吃西红柿 &#x1f345; 简介&#xff1a;CSDN博客专家 & 总榜前十&#x1f3c6;、HDZ核心组成员。欢迎点赞、收藏、评论 &#x1f345; 粉丝专属福利&#xff1a;知识体系、面试题库、技术互助、简历模板。文末公众号领取 &#x1f…

计算机视觉已超越人类眼睛?腾讯优图与《科学》杂志全面解读

来源: 腾讯研究院摘要&#xff1a;视觉是人类认知世界的重要组成部分&#xff0c;而计算机视觉作为人工智能的核心技术之一&#xff0c;近几年的发展现状如何&#xff1f;视觉是人类认知世界的重要组成部分&#xff0c;而计算机视觉作为人工智能的核心技术之一&#xff0c;近几…

ScrollView与TableView实现选择效果

在cocos2dx中&#xff0c;ScrollView与TableView都可以实现选择效果&#xff0c;其中ScrollView较为原始&#xff0c;TableView的格子大小可以不与winSize一样大。 ScrollView实现 #include "T25ScrollView.h" #include "AppMacros.h"CCScene* T25Scroll…

科学家发现新的人类脑细胞,或可解答一个难题

来源&#xff1a;中国生物技术网关于人类大脑最令人感兴趣的问题之一&#xff0c;也是神经科学家们最难回答的问题之一&#xff0c;就是到底是什么让我们的大脑与其他动物的大脑区别开来。Allen脑科学研究所的研究员Ed Lein博士说&#xff1a;“我们并不清楚是什么让人类大脑变…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨统计各专业学生人数【难度中等】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

五问智能教育未来发展:重点解决什么问题?

来源&#xff1a;人民日报日前&#xff0c;首届中国智能教育大会在北京举行&#xff0c;教育部有关负责人、人工智能专家和教育专家、一些地方政府及教育行政部门负责人、大中小学校长、教师和企业家等近1000人参加。与会代表认为&#xff0c;智能教育将会越来越多地影响每一个…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 6丨寻找用户推荐人【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

实现超级玛丽上下左右运动

用Cocos2dx实现超级玛丽&#xff0c;首先用帧循环定时器判断方向&#xff0c;再在类中实现运行以及判断是否能运动。 方向控制 void LayerGame::moveMario(float dt) { #ifdef WIN32short key;key GetKeyState(F);if (key < 0) _marioDir Common::RIGHT;key GetKeyStat…

【每日SQL打卡】​​​​​​​​​​​​​​​DAY 7丨大的国家【难度简单】

活动介绍&#xff1a; 「数据仓库技术交流群」已经正式启动每日SQL打卡&#xff0c;帮助大家扎实基础&#xff0c;努力工作之余&#xff0c;别忘了自我提升。 欢迎报名和邀请小伙伴参与&#xff0c;一个人可能走得很快&#xff0c;但一群人会走得很远。 &#x1f345;题目汇总(…

自动驾驶前沿报告!解密六大关键技术,全球人才分布

来源&#xff1a;智东西摘要&#xff1a;清华-中国工程院知识智能联合研究中心从技术、人才、应用和趋势的维度盘点自动驾驶的发展。从传统车企到新造车势力&#xff0c;再到互联网大佬&#xff0c;都在加注自动驾驶。自动驾驶既指向了更高效安全的交通运营系统&#xff0c;也意…