数据结构之顺序队列
来源:互联网 发布:淘宝购物评级怎么提升 编辑:程序博客网 时间:2024/05/22 04:58
本次的主题是队列,队列是另一种限定性的线性表(当然是人为规定的),即:它只允许在表的一端插入元素,在另一端删除元素,故具有先进先出(FIFO)的特性。
本次的代码主要涉及到队列的基本操作:
对列的初始化:initsqueueu()
入队操作:entersequeue(sequeue*q,int x)
出队操作:delsequeue(sequeue*q,int*x)
判空操作:empty(sequeue*q)
取队首元素:getseq(sequeue*q,int*x)
打印队列:print(sequeue q)
顺序队列的初始化,使用两个指针front和rear。
typedef struct{ int data[max]; int front,rear;}sequeue;
为了实现基本操作,我们约定在非空队列中,头指针front总是指向当前队列的第一个元素的前一个位置,而尾指针rear则总是指向当前队列最后一个元素的所在位置。
因此,我们可以完成一些具体的要求:
队列的初始化条件:q->front=q->rear=-1
队满条件:q->rear=max-1
对空条件:q->front=q->rear
好了,闲话少说,show the code
#include<stdio.h>#define max 10typedef struct{ int data[max]; int front,rear;}sequeue;sequeue initsequeue(){ sequeue q; q.front=-1; q.rear=-1; return q;}int getseq(sequeue*q,int*x){ if(q->front==q->rear) return 0; else { *x=q->data[(q->front)+1]; return 1; }}int entersequeue(sequeue*q,int x){ if(q->rear==max-1) return 0; q->rear++; q->data[q->rear]=x; return 1;}int empty(sequeue*q){ return (q->front==q->rear); }int delsequeue(sequeue*q,int*x){ if(q->front==q->rear) return 0; else { q->front++; *x=q->data[q->front]; return 1; }}void print(sequeue q){ int n; if(q.front!=q.rear) { puts("the sequeue out:"); for(n=q.front+1;n<q.rear;n++) printf("%d ",q.data[n]); } else printf("the sequque is empty");}int main() { sequeue queue; int n,y,z,i,j; queue=initsequeue(); if(empty(&queue)!=0) printf("it is empty"); else printf("\nit is not empty"); printf("\ninput the number:"); scanf("%d",&n); printf("your number:\n"); for(i=1;i<=n;i++) { scanf("%d",&y); entersequeue(&queue,y); } print(queue); getseq(&queue,&z); printf("\nnow the front:%d\n",z); print(queue); printf("\nyou want to out number:"); scanf("%d",&j); printf("the had out's sequeue:"); for(i=1;i<=j;i++) { delsequeue(&queue,&z); printf("%d ",z); } printf("\n"); print(queue); if(empty(&queue)!=0) printf("the queue is empty\n"); else printf("\nthe queue is not empty\n"); return 0;}
运行截图
总结
还是那句话,这一次的代码虽然长,但是都是由一些定义的函数堆积起来的,或许未来的工程项目也会是如此这般吧。理解起来并非困难,重要的还是对于顺序队列的基本概念的熟悉,当然,还有最重要的是前面的扎实的基础。
阅读全文
0 0
- 数据结构之顺序队列
- 数据结构之顺序队列
- 数据结构之顺序队列
- 数据结构之顺序队列
- 数据结构之顺序队列
- 数据结构之队列-顺序队列
- 数据结构之顺序循环队列
- [C++] 数据结构之顺序队列
- 数据结构——队列之顺序队列
- 数据结构之顺序队列(循环队列)
- 数据结构之队列(顺序队列和链式队列)
- 【数据结构-队列】顺序队列
- 数据结构:队列- 顺序队列
- 算法与数据结构之七----顺序队列
- 数据结构之队列的顺序存储
- 数据结构之顺序队列(优化版)
- java 数据结构之 顺序存储结构 队列
- 数据结构之队列的顺序实现
- js促销商品倒计时
- 安卓广播机制学习笔记
- Linux常用命令
- 深入理解Java虚拟机(5)--对象的访问定位
- StringBuffer类的使用
- 数据结构之顺序队列
- 玲珑杯round17 A题
- 现代化先进手段—人脸识别技术
- python中的isinstance
- weblogic上的主题订阅队列---简单demo
- JavaScript 单线程 & 定时器
- 如何选择电瓶修复技术培训的品牌?
- Java设计模式笔记之外观模式
- n的p进制下的数码之和问题