队列
队列
队列的顺序存储解构
队列的顺序存储
队列的顺序存储类型可描述为
| #define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int front,rear; }SqQueue;
|
循环队列的操作
(1)初始化
| void InitQueue(SqQueue &Q){ Q.rear=Q.front=0; }
|
(2)判队空
| bool isEmpty(SqQueue Q){ if(Q.rear == Q.front) return true; else return false; }
|
(3)入队
| bool EnQueue(SqQueue &Q,ElemType x){ if((Q.rear+1)%MaxSize==Q.front) return false; Q.data[Q.rear]=x; Q.rear=(Q.rear+1)%MaxSize; return true; }
|
(4)出队
| bool DeQueue(SqQueue &Q,ElemType &x){ if(Q.rear == Q.front) return false; x=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; return true; }
|
循环队列的完整操作
程序源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include<bits/stdc++.h> using namespace std; typedef int ElemType; #define MaxSize 50 typedef struct{ ElemType data[MaxSize]; int front,rear; }SqQueue; void InitQueue(SqQueue &Q){ Q.rear=Q.front=0; } bool isEmpty(SqQueue Q){ if(Q.rear == Q.front) return true; else return false; } bool EnQueue(SqQueue &Q,ElemType x){ if((Q.rear+1)%MaxSize==Q.front) return false; Q.data[Q.rear]=x; Q.rear=(Q.rear+1)%MaxSize; return true; } bool DeQueue(SqQueue &Q,ElemType &x){ if(Q.rear == Q.front) return false; x=Q.data[Q.front]; Q.front=(Q.front+1)%MaxSize; return true; } void PrintSqQueue(SqQueue Q){ int point = Q.front; while(point!=Q.rear) { cout<<Q.data[point]<<" "; point=(point+1)%MaxSize; } cout<<endl; } int main(){ SqQueue Q; InitQueue(Q); for(int i=0;i<5;i++) { EnQueue(Q,i); } PrintSqQueue(Q); for(int i=1;i<=5;i++) { int x; DeQueue(Q,x); cout<<"这是第"<<i<<"次出队"<<"出队的元素是" <<x<<endl; if(!isEmpty(Q)) { cout<<"当前队列为:"; PrintSqQueue(Q); }else{ cout<<"此时的队列为空队列"<<endl; } } return 0; }
|
程序输出:
| 0 1 2 3 4 这是第1次出队出队的元素是0 当前队列为:1 2 3 4 这是第2次出队出队的元素是1 当前队列为:2 3 4 这是第3次出队出队的元素是2 当前队列为:3 4 这是第4次出队出队的元素是3 当前队列为:4 这是第5次出队出队的元素是4 此时的队列为空队列
|
队列的链式存储结构
队列的链式存储
队列的链式存储类型可描述为
| typedef struct LinkNode{ ElemType data; struct LinkNode *next; }LinkNode; typedef struct{ LinkNode *front,*rear; }LinkQueue;
|
链式队列的基本操作
(1)初始化
| void InitQueue(LinkQueue &Q){ Q.front = Q.rear=(LinkNode*)malloc(sizeof(LinkNode)); Q.front->next=NULL; }
|
(2判队空
| bool IsEmpty(LinkQueue Q){ if(Q.front==Q.rear) return true; else return false; }
|
(3)入队
| void EnQueue(LinkQueue &Q,ElemType x){ LinkNode *s =(LinkNode*)malloc(sizeof(LinkNode)); s->data=x; s->next=NULL; Q.rear->next=s; Q.rear=s; }
|
(4)出队
| bool DeQueue(LinkQueue &Q,ElemType &x){ if(Q.front == Q.rear) return false; LinkNode *p =Q.front->next; x=p->data; Q.front->next=p->next; if(Q.rear==p){ Q.rear = Q.front; } free(p); return true; }
|
链式队列的完整操作
程序源代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| #include<bits/stdc++.h> using namespace std; typedef struct LinkNode{ int data; struct LinkNode *next; }LinkNode; typedef struct{ LinkNode *front,*rear; }LinkQueue; void InitQueue(LinkQueue &Q){ Q.front = Q.rear=(LinkNode*)malloc(sizeof(LinkNode)); Q.front->next=NULL; } bool IsEmpty(LinkQueue Q){ if(Q.front==Q.rear) return true; else return false; } void EnQueue(LinkQueue &Q,int x){ LinkNode *s =(LinkNode*)malloc(sizeof(LinkNode)); s->data=x; s->next=NULL; Q.rear->next=s; Q.rear=s; } bool DeQueue(LinkQueue &Q,int &x){ if(Q.front == Q.rear) return false; LinkNode *p =Q.front->next; x=p->data; Q.front->next=p->next; if(Q.rear==p){ Q.rear = Q.front; } free(p); return true; } void PrintQueue(LinkQueue Q) { LinkNode *tmp=Q.front->next; while(tmp!=NULL) { cout<<tmp->data<<" "; tmp=tmp->next; } cout<<endl; } int main() { LinkQueue Q; InitQueue(Q); for(int i=5;i>0;i--) { EnQueue(Q,i); } PrintQueue(Q); for(int i=1;i<=5;i++) { int x; DeQueue(Q,x); cout<<"这是第"<<i<<"次出队"<<"出队的元素是" <<x<<endl; if(!IsEmpty(Q)) { cout<<"当前队列为:"; PrintQueue(Q); }else{ cout<<"此时的队列为空队列"<<endl; } } return 0; }
|
程序输出:
| 5 4 3 2 1 这是第1次出队出队的元素是5 当前队列为:4 3 2 1 这是第2次出队出队的元素是4 当前队列为:3 2 1 这是第3次出队出队的元素是3 当前队列为:2 1 这是第4次出队出队的元素是2 当前队列为:1 这是第5次出队出队的元素是1 此时的队列为空队列
|