队列的顺序存储实现和链式存储实现
2017-03-23 21:26
337 查看
队列的顺序存储实现
队列的链式存储实现
一道测试题:
现采用大小为10的数组实现一个循环队列。设在某一时刻,队列为空且此时front和rear值均为5。经过若干操作后,front为8,rear为2,问:此时队列中有多少个元素?
A.4
B.5
C.6
D.7
答案:A
解析:
1. 若队尾>队头
队列元素个数=队尾指针-队头指针
2. 若队头>队尾
队列元素个数=队尾指针-队头指针+队列容量
//队列的顺序存储实现 #define MaxSize<储存数据元素的最大个数> struct QNode{ ElementType Data[MaxSize];//一维数组 int rear;//记录队列尾元素位置的变量 int front;//记录队列头元素位置的变量 }; typedef struct QNode *Queue; //循环队列:front=rear为什么无法判别队列是空还是满? //front与rear差距有6种情况0~5 n种 //队列装载元素个数情况有7种0~6 n+1种 //用n种状态来区分n+1种情况 //解决方案: //(1)使用额外标记:Size或者tag域,Size记录元素个数,加入元素时Size+1,删除时Size-1 //标记元素tag 0~1,插入元素时tag置1,删除元素时tag置0,查看tag值可知最后一次操作 //(2)仅使用n-1个数组空间 //1.入队列 void AddQ(Queue PtrQ,ElementType item) { if((PtrQ->rear+1)%MaxSize==PtrQ->front){ printf("队列满");//循环队列,5的下一位为0,使用求余函数 return; } PtrQ->rear=(PtrQ->rear+1)%MaxSize; PtrQ->Data[PtrQ->rear]=item;//将item放入 } //2.出队列 ElementType DeleteQ(Queue PtrQ) { if(PtrQ->front==PtrQ->rear){ printf("队列空"); return ERROR; } else{ PtrQ->front=(PtrQ->front+1)%MaxSize; return PtrQ->Data[PtrQ->front]; } }
队列的链式存储实现
//队列的链式存储实现 //front:删除操作 链表的头 //rear:插入操作 //front和rear只能+,不能- struct Node{ ElementType Data;//域 struct Node *Next;//指针Next把链表串在一起 }; struct QNode{//链队列结构 struct Node *rear;//指向队尾结点 struct Node *front;//指向队头结点 }; typedef struct QNode *Queue; Queue PtrQ; //不带头结点的链式队列出队操作的一个示例 ElementType DeleteQ(Queue PtrQ)//结构指针 { struct Node *FrontCell; ElementType FrontElem; if(PtrQ->front==NULL){//front不指向任何元素 printf("队列空"); return ERROR; } FrontCell=PtrQ->front;//如果队列不空,使front找到头个元素 if(PtrQ->front==PtrQ->rear)//若队列中只有一个元素 PtrQ->front=PtrQ->rear=NULL;//删除后队列置为空 else PtrQ->front=PtrQ->front->Next;//指向下一个元素 FrontElem=FrontCell->Data;//把第一个元素的值保存在一个变量中 free(FrontCell);//释放被删除结点空间 return FrontElem;//返回变量的值 }
一道测试题:
现采用大小为10的数组实现一个循环队列。设在某一时刻,队列为空且此时front和rear值均为5。经过若干操作后,front为8,rear为2,问:此时队列中有多少个元素?
A.4
B.5
C.6
D.7
答案:A
解析:
1. 若队尾>队头
队列元素个数=队尾指针-队头指针
2. 若队头>队尾
队列元素个数=队尾指针-队头指针+队列容量
相关文章推荐
- 队列的顺序存储和链式存储实现
- 采用链式存储实现队列的初始化、入队、出队操作。
- 循环队列 顺序存储 C实现
- java队列实现(顺序队列、链式队列、循环队列)
- 线性表 顺序存储 链式存储 ---java实现
- 队列(链式存储)C++模板实现
- 采用顺序存储实现循环队列的初始化、入队、出队操作。
- 队列的顺序实现(循环数组)与链式实现
- 重温数据结构:队列的链式实现、顺序实现及循环队列
- 【线性表一:】两种存储结构的代码实现:顺序存储和链式存储
- 队列的链式存储与顺序存储
- 线性结构的顺序存储和链式存储的实现代码(二)
- 线性表的顺序存储和链式存储的实现(C)
- (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作
- 队列- 链式存储-Java实现
- 队列的线性存储和链式存储实现
- 链式存储的队列的实现
- 顺序存储实现队列 循环队列 好麻烦
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
- 队列(顺序存储)C++模板实现