用c语言进行链式队列的创建,编译链接没错,但是运行的时候程序被终止。以下是源代码和注释

#include<stdio.h>#include<stdlib.h>#include<malloc.h>structnode//定义节点{intdata;structn... #include<stdio.h>
#include <stdlib.h>
#include<malloc.h>
struct node //定义节点
{int data;
struct node *next;
};
struct linkqueue//定义指针
{struct node* front;
struct node* rear;
};
void create_link(struct linkqueue *ps);
void insert_link(struct linkqueue *ps,int val);
void traverse_link(struct linkqueue *ps);
int main()
{struct linkqueue p;
create_link(&p);
insert_link(&p,1);
insert_link(&p,2);
insert_link(&p,3);
insert_link(&p,4);
traverse_link(&p);
}
void create_link(struct linkqueue *ps)//初始化,创建一个队头不存放有效数据的队列,
{struct node * pnew=(struct node*)malloc(sizeof(struct node));
if(pnew==NULL)
{printf("创建队列失败,终止程序\n");
exit(-1);
}
else{ps->front=pnew;//让front和rear指向同一个节点
ps->rear=ps->front;
ps->rear->next=NULL; }
}
void insert_link(struct linkqueue *ps,int val)//完成队列的增加。
{struct node * pnew=(struct node*)malloc(sizeof(struct node));//申请一个节点
pnew->data=val;//将要放入队列的值赋给节点的数据域
pnew=ps->rear->next;//将rear指向新的节点,并将新的节点的指针域置空。
ps->rear=pnew;
pnew->next=NULL;
}
void traverse_link(struct linkqueue *ps)//完成队列遍历
{struct node *p=ps->front->next;//申请一个临时指针变量,以完成队列遍历。因为头节点没有存放数据所以让指针指向front下一个节点
while(p->next!=NULL)//当指针指向的节点的指针域不为空时就继续下移,并且输出本节点的数据
{printf("%d ",p->data);
p=p->next;
}
}
展开
 我来答
丿艾瑞灬莉娅
2018-07-31 · TA获得超过916个赞
知道小有建树答主
回答量:926
采纳率:78%
帮助的人:418万
展开全部

自行比对这两个函数吧

void insert_link(struct linkqueue *ps,int val)//完成队列的增加。
{
    struct node * pnew=(struct node*)malloc(sizeof(struct node));//申请一个节点
    pnew->data=val;//将要放入队列的值赋给节点的数据域
    pnew->next=NULL;    
//  pnew=ps->rear->next;//将rear指向新的节点,并将新的节点的指针域置空。
    ps->rear->next=pnew;
    ps->rear=ps->rear->next;
//  pnew->next=NULL;
}
void traverse_link(struct linkqueue *ps)//完成队列遍历
{
    struct node *p=ps->front->next;//申请一个临时指针变量,以完成队列遍历。因为头节点没有存放数据所以让指针指向front下一个节点
    while(/*p->next*/p!=NULL) { //当指针指向的节点的指针域不为空时就继续下移,并且输出本节点的数据
        printf("%d ",p->data);
        p=p->next;
    }
}
追问
感谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2018-07-31 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6374万
展开全部
pnew=ps->rear->next;//将rear指向新的节点,并将新的节点的指针域置空。——这一句是否应该是ps->rear->next=pnew;?其余再未往下看……
追问
感谢!自己写的太不容易找出错误了!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式