主题:[讨论]队列的链表存储结构
大家帮忙看看这队列的链表存储结构有什么问题,老找不到错误。
#include"stdio.h"
#include"stdlib.h"
#define ElemType int
typedef struct NodeType
{ ElemType data;
struct NodeType *next;
}NodeType;
typedef struct
{NodeType *front,*rear;
}LinkQueue;
NodeType *p,*s,*h;
void outlin(LinkQueue qq);
void creat(LinkQueue *qe);
void insert(LinkQueue *qe,ElemType x);
ElemType delet(LinkQueue *qe);
void main()
{
LinkQueue que;ElemType y,x;
int cord;
do{
printf("\n 主菜单 \n");
printf(" 1 建立链表队列 \n");
printf(" 2 入队一个元素 \n");
printf(" 3 出对一个元素 \n");
printf(" 4 结束程序运行 \n");
printf("-------------------------------\n");
printf("请输入您的选择(1,2,3,4)");
scanf("%d",&cord);
switch(cord)
{
case 1:{ creat(&que);
outlin(que);
}break;
case 2:{ printf("\n x=?");
scanf("%d",&x);
insert(&que,x);
outlin(que);
}break;
case 3:{ y=delet(&que);
printf("\n x=%d",y);
outlin(que);
}break;
case 4:exit(0);
}
}while(cord<=4);
}
void outlin(LinkQueue qq)
{ p=qq.front->next;
while(p!=NULL) {printf(" data=%4d\n",p->data);
p=p->next;
}
printf("\n outend \n\n");
}
void insert(LinkQueue *qe,int x)
{
s=(NodeType *)malloc(sizeof(NodeType));
s->data=x;
s->next=NULL;
qe->rear->next=s;
qe->rear=s;
}
ElemType delet(LinkQueue *qe)
{ ElemType x;
if(qe->front==qe->rear)
{printf("队列为空。\n");
x=0;
}
else{
p=qe->front->next;
qe->front->next=p->next;
if(p->next==NULL)
qe->rear=qe->front;
x=p->data;
free(p);
}
return(x);
}
void creat(LinkQueue *qe)
{
int i,n,x;
h=(NodeType *)malloc(sizeof(NodeType));
h->next=NULL;
printf("n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n data= ");
scanf("%d",&x);
insert(qe,x);
}
}
#include"stdio.h"
#include"stdlib.h"
#define ElemType int
typedef struct NodeType
{ ElemType data;
struct NodeType *next;
}NodeType;
typedef struct
{NodeType *front,*rear;
}LinkQueue;
NodeType *p,*s,*h;
void outlin(LinkQueue qq);
void creat(LinkQueue *qe);
void insert(LinkQueue *qe,ElemType x);
ElemType delet(LinkQueue *qe);
void main()
{
LinkQueue que;ElemType y,x;
int cord;
do{
printf("\n 主菜单 \n");
printf(" 1 建立链表队列 \n");
printf(" 2 入队一个元素 \n");
printf(" 3 出对一个元素 \n");
printf(" 4 结束程序运行 \n");
printf("-------------------------------\n");
printf("请输入您的选择(1,2,3,4)");
scanf("%d",&cord);
switch(cord)
{
case 1:{ creat(&que);
outlin(que);
}break;
case 2:{ printf("\n x=?");
scanf("%d",&x);
insert(&que,x);
outlin(que);
}break;
case 3:{ y=delet(&que);
printf("\n x=%d",y);
outlin(que);
}break;
case 4:exit(0);
}
}while(cord<=4);
}
void outlin(LinkQueue qq)
{ p=qq.front->next;
while(p!=NULL) {printf(" data=%4d\n",p->data);
p=p->next;
}
printf("\n outend \n\n");
}
void insert(LinkQueue *qe,int x)
{
s=(NodeType *)malloc(sizeof(NodeType));
s->data=x;
s->next=NULL;
qe->rear->next=s;
qe->rear=s;
}
ElemType delet(LinkQueue *qe)
{ ElemType x;
if(qe->front==qe->rear)
{printf("队列为空。\n");
x=0;
}
else{
p=qe->front->next;
qe->front->next=p->next;
if(p->next==NULL)
qe->rear=qe->front;
x=p->data;
free(p);
}
return(x);
}
void creat(LinkQueue *qe)
{
int i,n,x;
h=(NodeType *)malloc(sizeof(NodeType));
h->next=NULL;
printf("n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("\n data= ");
scanf("%d",&x);
insert(qe,x);
}
}