#include"stdio.h"
#include"malloc.h"
typedef int ElemType;
typedef struct QNode{
ElemType data;
struct QNode *next;
}LinkQueue;
typedef struct PointerNode{
LinkQueue *front,*rear;
}QueueP;
QueueP *InitQueue(){
QueueP * Q;
Q->front = Q->rear = (LinkQueue *)malloc(sizeof(LinkQueue));
if(Q->front!=NULL){
printf("开辟头节点成功!");
Q->front->next=NULL;
return Q;
}else{
printf("开辟头节点失败!");
return NULL;
}
}
void DestroyQueue(QueueP *Q){
while(Q->front){
Q->rear=Q->front->next;
free(Q->front);
Q->front=Q->rear;
}
}
int QueueEmpty(QueueP *Q){
if(Q->front->next==NULL){
return 1;
}else{
return 0;
}
}
int QueueLength(QueueP *Q){
int i=0;
LinkQueue *p=Q->front;
while(p!=Q->rear){
i++;
p=p->next;
}
return i;
}
int EnQueue(QueueP *Q,ElemType e){
LinkQueue *p;
p=(LinkQueue *)malloc(sizeof(LinkQueue));
if(p!=NULL){
p->data=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
return 1;
}else{
printf("申请空间失败!");
return 0;
}
}
ElemType DeQueue(QueueP *Q){
LinkQueue *p;
ElemType e;
if(Q->front==Q->rear){
printf("队列为空!");
return -1;
}
p=Q->front->next;
e=p->data;
Q->front->next = p->next;
if(Q->rear==p){
Q->rear = Q->front;
}
free(p);
return e;
}
void QueueeTraverse(QueueP *Q,void (*visit)(ElemType)){
LinkQueue *p =Q->front->next;
while(p){
visit(p->data);
p=p->next;
}
printf("\n");
}
void print(ElemType e){
printf("%d\t",e);
}
main(){
QueueP *Q;
int i;
Q=InitQueue();
printf("%d\n",QueueEmpty(Q));
for(i=1;i<=10;i++){
EnQueue(Q,i);
}
printf("%d\n",QueueEmpty(Q));
QueueeTraverse(Q,print);
printf("%d\n",QueueEmpty(Q));
//DestroyQueue(p);
}
链队列
最新推荐文章于 2023-11-25 21:16:30 发布