您的位置:首页 > 其它

队列的链式存储

2015-10-21 13:34 218 查看
#include<stdio.h>

#include<malloc.h>

#include<windows.h>

typedef int elemtype;

typedef struct qnode //数据节点的定义

{

elemtype data;

struct qnode *next;

}qnode;

typedef struct //链队的定义

{

qnode *front;

qnode *rear;

}liqueue;

void initqueue(liqueue *&q) //初始化

{

q=(liqueue *)malloc(sizeof(liqueue));

q->front=q->rear=NULL;

}

void enqueue(liqueue *q) //进队

{

int e;

qnode *p;

p=(qnode *)malloc(sizeof(qnode));

printf("请输入需进队元素:");

scanf("%d",&e);

p->data=e;

p->next=NULL;

if(q->rear==NULL)

{

q->front=q->rear=p;

printf("进队成功!\n");

}

else

{

q->rear->next=p;

q->rear=p;

printf("进队成功!\n");

}

}

void queueempty(liqueue *q) //判断队列是否为空

{

if(q->rear==NULL)

printf("队列为空!\n");

else

printf("队列不为空!\n");

}

void dequeue(liqueue *&q) //出队列

{

int e;

qnode *t;

if(q->rear==NULL)

printf("队列为空,出队失败!\n");

else

{

t=q->front;

e=t->data;

if(q->front==q->rear)

q->front=q->rear=NULL;

else

q->front=q->front->next;

free(t);

printf("元素%d出队列成功!\n",e);

}

}

void destroyqueue(liqueue *q) //销毁链队

{

qnode *p=q->front,*r;

char t;

getchar();

printf("确定要销毁链队请输入y,否则不销毁!\n");

scanf("%c",&t);

if(t=='y')

{

if(p!=NULL)

{

r=p->next;

while(r!=NULL)

{

free(p);

p=r;

r=p->next;

}

}

free(p);

free(q);

printf("销毁成功\n");

exit(0);

}

else

printf("链队未销毁!\n");

}

void main()

{

liqueue *q;

printf(" ***************欢迎使用链队的运算系统******************\n");

int m;

initqueue(q);

while(1)

{

printf("请选择:");

printf("1 进队列\n");

printf(" 2 出队列\n");

printf(" 3 判断队列是否为空\n");

printf(" 4 销毁链队\n");

printf(" 5 退出\n");

scanf("%d",&m);

switch(m)

{

case 1:enqueue(q);break;

case 2:dequeue(q);break;

case 3:queueempty(q);break;

case 4:destroyqueue(q);break;

case 5:exit(0);

default:printf("输入错误请重新输入!\n");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: