一、用链式存储实现队列
1.带头结点
typedef struct LinkNode{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
2.不带头结点
二、基本操作
1.创
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
}
void InitQueue(LinkNode &Q){
Q.front = NULL;
Q.rear = NULL;
}
void testLinkQueue(){
LinkQueue Q;
InitQueue(Q);
}
2.增(入队)
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;
}
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;
Q.rear = s;
}
}
3.删(出队)
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.front->next==NULL)
return false;
LinkNode *s = Q.front->next;
x = s->data;
Q.front->next = s->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 *s = Q.front;
x = s->data;
Q.front = s->next;
if(Q.rear==s){
Q.front=NULL;
Q.rear=NULL;
}
free(s);
return true;
}
4.查
ElemType GetElem(LinkNode Q,ElemType x){
if(Q.front==Q.rear)
return -99;
x = Q.front->next->data;
}
ElemType GetElem(LinkNode Q,ElemType x){
if(Q.front==NULL)
return -99;
x = Q.front->data;
}
5.判空、判满
bool IsEmpty(LinkNode Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
bool IsEmpty(LinkNode Q){
if(Q.front==NULL)
return true;
else
return false;
}