/*下面两句是文件包含命令*/
#include
#include
/*下面两句是宏定义命令*/
#define ElemType int
#define Q (*qe)
struct quenode /*定义链队列中节点的类型*/
{
ElemType data;
struct quenode *next;
}*p,*s,*h;
struct quefr /*定义链队列*/
{
struct quenode *front,*rear;
};
main()
{
struct quefr *que; /*定义变量que为指向链队列类型的指针*/
int x,cord;
/*下面四句为函数声明,如果被调用的函数在主调函数的后面,需要进行函数声明*/
void Outlin(struct quefr qq);
void creat(struct quefr *qe);
void insert(struct quefr *p,ElemType x);
ElemType deletes(struct quefr *qe);
/*下面的do。
。。while循环用来显示主菜单的,根据菜单的提示进行相应的操作,例如,如果输入的是1,则进行建立链队列和输出操作*/
do
{
printf("\n");
printf(" 主菜单 \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:
{
que=(struct quefr *)malloc(sizeof(struct quefr)); /*申请空间*/
creat(que); /*调用建立队列的函数*/
Outlin(*que); /*调用输出函数*/
}break;
case 2:
{
printf("x=?");
scanf("%d",&x);
insert(que,x); /*调用入队函数*/
outlin(*que); /*调用输出函数*/
}break;
case 3:
{
printf("x=%d\n",deletes(que)); /*调用出队函数*/
Outlin(*que); /*调用输出函数*/
}break;
case 4:
{
exit (0); /*退出系统*/
}
}
}while (cordnext; /*指向第一个数据元素节点 */
while(p!=NULL) /*档队列不空时,进行下面的操作*/
{
printf("data=%d\n",p->data); /*输出当前元素*/
p=p->next; /*指针后移,以便输出下面的元素*/
}
printf("\n outend \n");
}
void insert(struct quefr *qe,int x)/*入队x值的节点*/
{
s=(struct quenode *)malloc(sizeof(struct quenode)); /*申请空间*/
s->data=x; /*把x的值赋给s的data域*/
s->next=NULL;
ar->next=s; /*将新生成的节点s插入的队尾*/
ar=s; /*新插入的节点s变成了队尾*/
}
ElemType deletes(struct quefr *qe) /*出队函数*/
{
ElemType x;
if( ont== ar) /*如果队头和队尾相等,则说明是空队列*/
{
printf("队列为空。
\n");
x=0;
}
else /*若队列不为空*/
{
p= ont->next; /*取队头元素*/
ont->next=p->next; /*将队头元素p删除*/
if(p->next==NULL) /*若删除队头元素后,队列为空的则还需要修改队尾指针,队列为空的条件是队头指针与队尾指针相等*/
ar= ont;
x=p->data; /*把队头元素的值保存在x中*/
free(p); /*释放p指针*/
}
return(x); /*返回队头元素*/
}
void creat(struct quefr *qe) /*建立链队列的函数*/
{
int i,n,x;
printf("n= ");
scanf("%d",&n); /*输入队列中的元素个数*/
h=(struct quenode*)malloc(sizeof(struct quenode)); /*为头节点申请空间*/
h->next=NULL;
ont=h; /*空队列时,队头和队尾指针分别指向头节点*/
ar=h;
for(i=1;i<=n;i++) /*分别将n个元素输入,并且建立由n个节点组成的链队列*/
{
scanf("%d",&x);
insert(qe,x); /*每输入一个元素,将其插入到队列中,因此要调用插入函数*/
}
}
请详细解释下上面的程序;
不知我的解释还算明白吗,若不明白,请你提出来,我再修改
。
全部