永发信息网

循环链表的创建

答案:3  悬赏:40  手机版
解决时间 2021-05-01 05:45
  • 提问者网友:眉目添风霜
  • 2021-05-01 01:18

#include"stdio.h"
#define len sizeof(node)
#define null 0
typedef struct node
{int data;
struct node *rlink,*llink;
}node,*linklist;
linklist creat()
{linklist head,list,q,p;
int i;
head->rlink=head;
head->llink=head;
list=head;
p=head;
printf("please input numbers(end to 0):");
scanf("%d",&i);
while(i!=0)
{q=(linklist)malloc(len);
q->data=i;
p->rlink=q;
q->llink=p;
p->llink=q;
q->rlink=p;
p=q;
scanf("%d",&i);
}
return list;
}
void pp(linklist list)
{linklist p=list->rlink;
while(p!=list)
printf("%d ",p->data);
}
main()
{linklist list;
list=creat();
pp(list);
}

这是循环链表的创建,在VC编译中执行是提示“内存不能为只读”,不晓得是怎么回事,大家知道的请帮帮忙,小弟在此谢谢了。

最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-05-01 01:33

linklist creat()
这个函数有问题


初始化的是个指针


head->rlink=head;
head->llink=head;


仅仅是个指针 怎么赋值呢?


既然是个没有分配空间的指针p=head; 这句话有意义吗?


意见就给到这里 仔细考虑下该怎么改吧

全部回答
  • 1楼网友:往事埋风中
  • 2021-05-01 04:15

#include"stdio.h" #include"stdlib.h" #define len sizeof(node) #define null 0 typedef struct node {int data; struct node *rlink,*llink; }node,*linklist; linklist creat() {linklist head,list,q,p; int i; head=(linklist)malloc(len); head->rlink=head; head->llink=head; list=head; p=head; printf("please input numbers(end to 0):"); scanf("%d",&i); while(i!=0) {q=(linklist)malloc(len); q->data=i; p->rlink=q; q->llink=p; //p->llink=q; //q->rlink=p->llink; p=q; scanf("%d",&i); } head->rlink->llink=q; q->rlink=head->rlink; return list; } void pp(linklist list) {linklist p=list->rlink; do {printf("%d ",p->data);p=p->rlink;} while(p!=list->rlink); } void main() {linklist list; list=creat(); pp(list); }

第一,head被声明成指针,在被使用之前必须要有可用单元,而你的程序没有声明节点变量,所以必须用malloc给head分配单元,其次,尾插法写错了。这里我改了,用head来作为头结点,p记录最后一次新建完的节点,q为新生节点。最后输出语句没有指针移动,导致死循环。都改了。

  • 2楼网友:青尢
  • 2021-05-01 03:03

尝试改一下:

{linklist head,list,q,p; int i; head->rlink=head; head->llink=head; list=head;

p=head; printf("please input numbers(end to 0):"); scanf("%d",&i); while(i!=0) {q=(linklist)malloc(len); q->data=i; p->rlink=q; q->llink=p; q->rlink=head; //循环指向头

head->llink=q; //指向头 p=q; scanf("%d",&i); } return list;

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯