#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
int size;
}LinkQueue;
void InitQueue(LinkQueue &Q){
Q.front = Q.rear = (LinkNode *)malloc(sizeof(LinkNode));
Q.front->next = NULL;
Q.size = 0;
}
bool QueueEmpty(LinkQueue Q){
if(Q.front == Q.rear){//0 == Q.size || Q.front == NULL || Q.rear == NULL
return true;
}else{
return false;
}
}
bool EnQueue(LinkQueue &Q,int e){
LinkNode * s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
++Q.size;
return true;
}
bool DeQueue(LinkQueue &Q,int &e){
if(QueueEmpty(Q)){
return false;
}
LinkNode *p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if(Q.rear == p){
Q.rear = Q.front;
}
free(p);
--Q.size;
return true;
}
bool GetHead(LinkQueue Q,int &e){
if(QueueEmpty(Q)){
return false;
}
e = Q.front->next->data;
return true;
}
void PrintStack(LinkQueue Q){
LinkNode *p = Q.front->next;
for(int i = 0; i < Q.size; ++i){
printf("\t%d",p->data);//0
p = p->next;
}
printf("\n");
}
int main(){
LinkQueue Q;
InitQueue(Q);
for(int i = 0; i < 10; i++){
EnQueue(Q,i);
}
PrintStack(Q);//0123456789
int x;
if(DeQueue(Q,x)){
printf("\t%d",x);//0
}
printf("\n");
EnQueue(Q,1);
while(Q.size){
int x;
if(DeQueue(Q,x)){
printf("\t%d",x);//1234567891
}
}
printf("\n");
}
王道数据结构:队列的链式实现-带头结点(个人)
最新推荐文章于 2024-07-25 23:20:14 发布