带头节点的入队和出队
#include <stdio.h>
#include <cstdlib>
typedef struct LinkNode{
int data;
struct LinkNode* next;
}LinkNode;
typedef struct {
struct LinkNode* front,*rear;
}LinkQueue;
void InitLink(LinkQueue &q){
q.front=q.rear=(LinkNode *)malloc(sizeof (LinkNode));
q.front->next=NULL;
}
bool EnQueue(LinkQueue &q,int e){
LinkNode *p=(LinkNode *)malloc(sizeof (LinkNode));
p->data=e;
p->next=NULL;
q.rear->next=p;
q.rear=p;
return true;
}
bool DeQueue(LinkQueue &q,int &x){
LinkNode *p=q.front->next;
if(q.front==q.rear) return false;
if(p->next==NULL){
x=p->data;
q.rear=q.front;
q.front->next=NULL;
return true;
}
q.front->next=p->next;
x=p->data;
free(p);
return true;
}
int main() {
LinkQueue Q;
InitLink(Q);
int x;
if(EnQueue(Q,1))
printf_s("插入成功");
EnQueue(Q,2);
EnQueue(Q,3);
DeQueue(Q,x);
printf_s("%d",x);
DeQueue(Q,x);
printf_s("%d",x);
DeQueue(Q,x);
printf_s("%d",x);
if(DeQueue(Q,x)== false)
printf_s("删除失败");
return 0;
}
不带头节点的入队和出队
#include <stdio.h>
#include <cstdlib>
typedef struct LinkNode{
int data;
LinkNode * next;
}LinkNode;
typedef struct {
LinkNode *front,*rear;
}LinkQueue;
void InitLink(LinkQueue &q){
q.rear=q.front=NULL;
}
bool EnQueue(LinkQueue &q,int e){
LinkNode *p= (LinkNode*)malloc(sizeof (LinkNode));
if(q.rear==NULL){
q.rear=q.front=p;
p->data=e;
p->next=NULL;
} else {
p->data=e;
p->next=NULL;
q.rear->next=p;
q.rear=p;
}
return true;
}
bool DeQueue(LinkQueue &q,int &x){
if(q.rear==NULL) return false;
LinkNode *p =q.front;
x=p->data;
if(q.rear==q.front){
q.rear=q.front=NULL;
} else{
q.front=q.front->next;
}
free(p);
return true;
}
int main() {
LinkQueue q;
int x;
InitLink(q);
EnQueue(q,1);
EnQueue(q,2);
EnQueue(q,3);
DeQueue(q,x);
printf_s("%d",x);
DeQueue(q,x);
printf_s("%d",x);
DeQueue(q,x);
printf_s("%d",x);
if(DeQueue(q,x)== false)
printf_s("出错了");
return 0;
}