用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;
}
} 展开
#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;
}
} 展开
2个回答
展开全部
自行比对这两个函数吧
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;
}
}
追问
感谢!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询