标题:求助,循环链表问题
只看楼主
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
 问题点数:0 回复次数:8 
求助,循环链表问题

各位好:下面是个循环单链表不正确的程序,谁能告诉我怎么改成循环链表,最好把代码告诉我,谢谢。
#include<stdio.h>
#include<stdlib.h>
typedef struct CLNode{
int data;
struct CLNode *next;
}CLnode,*CLinkList;

CLinkList CreateList(CLinkList L,int value);
void Output(CLinkList L);

int main(void)
{
CLinkList L=NULL;
int i,n,value;

printf("Please input n: ");
scanf("%d",&n);
for(i=1;i<=n;i++) //n代表结点数量
{
scanf("%d",&value);
L=CreateList(L,value); //创建程序
Output(L); //输出连表
}

return 0;
}

CLinkList CreateList(CLinkList L,int value)
{
CLinkList newPtr,previousPtr,currentPtr;

newPtr=(CLinkList)malloc(sizeof(CLnode));
if(newPtr)
{
newPtr->data=value;
newPtr->next=NULL;

previousPtr=NULL;
currentPtr=L;

while(currentPtr && currentPtr->data < value)
{
previousPtr=currentPtr;
currentPtr=currentPtr->next;

if(currentPtr==NULL) //这是我个人的想法,不对
previousPtr->next=L;
}
if(previousPtr==NULL)
{
newPtr->next=L;
L=newPtr;
}
else
{
previousPtr->next=newPtr;
newPtr->next=currentPtr;
}
}
else
printf("Dynamic malloc memory failure.\n");

return L;
}

void Output(CLinkList L)
{
CLinkList currentPtr;
if(L)
{
currentPtr=L;
while(currentPtr!=L)
{
printf("%d->",currentPtr->data);
currentPtr=currentPtr->next;
}
printf("NULL\n\n");
}
}

搜索更多相关主题的帖子: 链表 CLinkList int void 
2006-03-19 21:10
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
得分:0 
你的意思是不是想读入一个单链表,把他换成循环链表哦?

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-19 21:23
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 
我想直接创建循环链表

2006-03-19 21:30
cxwl3sxl
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:495
专家分:129
注 册:2005-11-12
得分:0 
我不知道了,回去看看书在来和你讨论吧(我还是刚刚开始学数据结构,不是很会)

努力,哈哈,总有一天会变成高手~~~~~~因为我相信:没有办不到,只有想不到!http://t..cn/fpress
2006-03-19 21:39
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 

仍然谢谢你


2006-03-19 21:41
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

#include<stdio.h>
#include<stdlib.h>
typedef struct CLNode
{
int data ;
struct CLNode*next ;
}
CLnode,*CLinkList ;

CLinkList CreateFirst(CLinkList FirstPtr,int value);
CLinkList InsertionNext(CLinkList L,int value);
void Output(CLinkList L);

int main(void)
{
CLinkList L=NULL ;
CLinkList FirstPtr=NULL ;
int i,n,value ;

printf("Please input n: ");
scanf("%d",&n);
scanf("%d",&value);
L=CreateFirst(FirstPtr,value);
Output(L);
//n代表结点数量
for(i=1;i<n;i++)
{
scanf("%d",&value);
L=InsertionNext(L,value);
//创建程序
Output(L);
//输出连表
}

return 0 ;
}
CLinkList CreateFirst(CLinkList FirstPtr,int value)
{

// CLinkList FirstPtr;

if(( FirstPtr=(CLinkList)malloc(sizeof(CLnode)))==NULL)
{
exit(0);
}
FirstPtr->data=value ;
FirstPtr->next=FirstPtr ;
return FirstPtr ;

}
CLinkList InsertionNext(CLinkList L,int value)
{
CLinkList NextPtr ;

if((NextPtr=(CLinkList)malloc(sizeof(CLnode)))==NULL)
{
exit(0);
}
NextPtr->data=value ;
NextPtr->next=L->next ;
L->next=NextPtr ;

return NextPtr ;
}
void Output(CLinkList L)
{
CLinkList currentPtr ;
if(L)
{
currentPtr=L ;
while(1)
{
printf("%d->",currentPtr->data);
if(currentPtr->next==L)break ;
currentPtr=currentPtr->next ;
}
printf("\n");
}
else printf("NULL\n\n");
}


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-03-19 22:22
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 
谢谢,谢谢,非常感谢

2006-03-19 22:28
haishanglang
Rank: 1
等 级:新手上路
帖 子:378
专家分:0
注 册:2006-3-2
得分:0 

#include<stdio.h>
#include<stdlib.h>
typedef struct CLNode{
int data;
struct CLNode *next;
}CLnode,*CLinkList;

CLinkList CreateList(int value);
void Output(CLinkList L);

int main(void)
{
CLinkList L=NULL;
int i,n;
printf("Please input n: ");
scanf("%d",&n);
L=CreateList(n); //创建程序
Output(L);
return 0;
}


CLinkList CreateList(int n)
{
int i=1;
CLinkList newPtr,previousPtr,currentPtr;
previousPtr=currentPtr=newPtr=(CLinkList)malloc(sizeof(CLnode));
printf("success\n");
printf("Input number:\n");
scanf("%d",&currentPtr->data);
printf("n=%d\n",n); // exit();
while(i<n)
{
i++;
currentPtr=(CLinkList)malloc(sizeof(CLnode));
printf("Input number:\n");
scanf("%d",&currentPtr->data);
previousPtr->next=currentPtr;
previousPtr=previousPtr->next;
}
currentPtr->next=newPtr; //指向第一个接点从而单循环链表创建成功
currentPtr=newPtr;
return newPtr;
}

void Output(CLinkList L)
{

CLinkList currentPtr,newPtr;
currentPtr=newPtr=L;
printf("The result is:\n");
printf("%d\n",currentPtr->data);
currentPtr=currentPtr->next;
while(currentPtr!=newPtr) //若从尾接点返回指向第一个接点就停止
{
printf("%d\n",currentPtr->data);
currentPtr=currentPtr->next;
}
}

俺将楼主的函数改了一部分,请谅解


2006-03-19 22:40
梦想中国
Rank: 2
等 级:新手上路
威 望:5
帖 子:539
专家分:0
注 册:2006-2-26
得分:0 
谢谢

2006-03-19 23:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-51437-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.095038 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved