循环链表的创建
答案: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为新生节点。最后输出语句没有指针移动,导致死循环。都改了。
尝试改一下:
{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;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯