c语言怎么看每一步运行什么,C语言程序讲解?

本文通过一个C语言程序演示了链队列的创建、插入、删除和输出操作。程序中定义了链队列的结构,包括链队列节点和链队列。主函数中通过菜单选择执行相应操作,如建立链队列、入队、出队。当选择建立链队列时,调用`creat`函数输入元素并输出;入队操作通过`insert`函数实现,出队操作通过`deletes`函数完成。程序还包含了对各函数的简单解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*下面两句是文件包含命令*/

#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); /*每输入一个元素,将其插入到队列中,因此要调用插入函数*/

}

}

请详细解释下上面的程序;

不知我的解释还算明白吗,若不明白,请你提出来,我再修改

全部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值