目錄
一、隊列的鏈式實現
typedef struct LinkNode{ //鏈式隊列結點
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{ //鏈式隊列
LinkNode *front,*rear; //隊列的隊頭和隊尾指針
}LinkQueue;
二、初始化(帶頭結點)
typedef struct LinkNode{
ElemType 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;
}
void testLinkQueue(){
LinkQueue Q;
LinkQueue(Q);
}
三、初始化(不帶頭結點)
void InitQueue(LinkQueue &Q){
Q.front = NULL;
Q.rear = NULL;
}
四、入隊(帶頭結點)
void EnQueue(LinkQueue &Q,ElemType x){
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s; //新結點插入到rear後
Q.rear = s; //修改表尾指針
}
五、入隊(不帶頭結點)
void EnQueue(LinkQueue &Q,ElemType x){
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
if(Q.front == NULL){ //在空隊列中插入第一個元素
Q.front = s; //修改隊頭隊尾指針
Q.rear = s;
}else{
Q.rear->next = s; //新結點插入到rear結點之後
Q.rear = s; //修改rear指針
}
}
六、出隊(帶頭結點)
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;
}
七、出隊(不帶頭結點)
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.front == NULL)
return false;
LinkNode *p = Q.front;
x = p->data;
Q.front = p->next;
if(Q.rear == p){
Q.front = NULL;
Q.rear = NULL;
}
free(p);
return true;
}
八、隊列滿的條件
順序存儲——預分配的空間耗盡時隊滿
鏈式存儲——一般不會隊滿,除非內存不足