您的位置:首页 > 编程语言 > C语言/C++

链队列的c语言实现

2015-06-11 22:10 330 查看
#include<stdio.h>
#include<stdlib.h>
#define QUEUE_MAX_SIZE 100
typedef int Status;
typedef int QElemtype;
typedef struct QNode{
QElemtype data;
struct QNode *next;
}*QueuePtr;
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;

Status InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) return 0;
Q.front->next=NULL;
return 1;
}

Status DestoryQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return 1;
}

Status ClearQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
Q.front->data=NULL;
Q.front=Q.rear;
}
return 1;
}

Status IsQueueEmpty(LinkQueue &Q){
if(Q.front==Q.rear)return 1;
return 0;
}

Status QueueLength(LinkQueue &Q){
QNode *p;
int i=0;
p=Q.front;
while(p->next){
p=p->next;
i++;
}
return i;
}

Status GetHead(LinkQueue &Q,QElemtype &e){
if(Q.front==Q.rear) return 0;
e=Q.front->next->data;
return 1;
}

Status EnQueue(LinkQueue &Q,QElemtype e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) return 0;
p->data=e;p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return 1;

}

Status DeQueue(LinkQueue &Q,QElemtype &e){
QueuePtr p;
p=Q.front->next;
if(Q.front==Q.rear) return 0;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return 1;
}

Status PrintQueue(LinkQueue &Q){
QNode *p;
p=Q.front;
while(p->next){
p=p->next;
printf("%d\n",p->data);
}
return 1;
}

int main(){
LinkQueue q;
InitQueue(q);
int set,isclose;
QElemtype e;
while(1){
set=0;
printf(" 1.队尾插入元素\n 2.删除队头元素并输出\n 3.输出队列的长度\n 4.销毁队列\n 5.得到队头元素 \n 6.查询该队列是否为空 \n 7.输出整个队列中的所有元素\n 8.建立队列(在销毁后重建)\n");
scanf("%d",&set);
switch(set){
case 1:printf("请输入元素\n");scanf("%d",&e);if(EnQueue(q,e)) printf("插入成功\n");else printf("插入失败\n"); break;
case 2:if(DeQueue(q,e))printf("%d\n",e);else printf("队列里无元素\n");break;
case 3:printf("%d\n",QueueLength(q));break;
case 4:if(DestoryQueue(q)) printf("销毁成功\n");break;
case 5:if(GetHead(q,e)) printf("%d\n",e);break;
case 6:if(IsQueueEmpty(q)) printf("队列为空\n"); else printf("队列不为空\n");break;
case 7:PrintQueue(q);break;
case 8:if(InitQueue(q));printf("建立成功\n");break;
}
printf("结束输入0\n");
scanf("%d",&isclose);
if(!isclose) break;
}
return 0;
}

本文出自 “zjwzjw369” 博客,谢绝转载!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: