首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于链表的几个小问题

2012-03-17 
关于链表的几个问题1.这个程序我是想按输入的顺序输出的,但只输出了一段乱码,那里错了?#include stdio.h

关于链表的几个问题
1.这个程序我是想按输入的顺序输出的,但只输出了一段乱码,那里错了?
#include "stdio.h"
#include "stdlib.h"
typedef struct Node
{
int Ndata;
Node *next;
}Node;
Node *creat(int k);
void pritlink(Node *head);

void main()
{
Node *w;
int y;
printf("请输入你想要输入数据的个数:");
scanf(" %d",&y);
w=creat(y);
pritlink(w);
}


Node *creat(int k)
{
Node *head,*p,*s,*r;
int i,m;
  head=(Node *)malloc(sizeof(Node));
if(!head)
{
printf("分配内存失败!\n");
exit(0);
}
head->next =NULL;
p=head;
for(i=1;i<=k;i++)
{
s=(Node *)malloc(sizeof(Node));
if(!s)
{
printf("分配内存失败!\n");
exit(0);
}
s->next=NULL;
printf("请输入第%d个整数\n",i);
scanf("%d",&s->Ndata);
  if(i==1)
{
s->next=head ;
head=s;
}
while(head)
{
r=head;
head=head->next ;
}
r=s;

}



return (p);
}
void pritlink(Node *head)
{
 Node *p;
 p=head;
 if(p)
 {
  do
  {
  printf(" %d",p->Ndata);
  p=p->next;
  }while(p!=NULL);
  printf("\n");
 }
 else
 printf("该表为空!");
}
2.这是按输入的反序输出的,但在输完数据后还输出了一段乱码,怎么回事??
#include "stdio.h"
#include "stdlib.h"
typedef struct Node
{
int Ndata;
Node *next;
}Node;
Node *creat(int k);
void pritlink(Node *head);

void main()
{
Node *w;
int y;
printf("请输入你想要输入数据的个数:");
scanf(" %d",&y);
w=creat(y);
pritlink(w);
}


Node *creat(int k)
{
Node *head,*p,*s;
int i;
  head=(Node *)malloc(sizeof(Node));
if(!head)
{
printf("分配内存失败!\n");
exit(0);
}
head->next =NULL;
for(i=1;i<=k;i++)
{
s=(Node *)malloc(sizeof(Node));
if(!s)
{
printf("分配内存失败!\n");
exit(0);
}
s->next=NULL;
printf("请输入第%d个整数\n",i);
scanf("%d",&s->Ndata);
   
s->next=head;
head=s;
}



return (head);
}
void pritlink(Node *head)
{
 Node *p;
 p=head;
 if(p)
 {
  do
  {
  printf(" %d",p->Ndata);
  p=p->next;
  }while(p!=NULL);
  printf("\n");
 }
 else
 printf("该表为空!");
}

[解决办法]
设个断点自己慢慢调试
[解决办法]
1.你的创建函数有问题
Node *creat(int k)
{
Node *head,*p,*s,*r;
int i;
head= p =NULL;
for(i=1;i<=k;i++)
{
s=(Node *)malloc(sizeof(Node));
if(!s)
{
printf("分配内存失败!\n");
exit(0);
}
s->next=NULL;
printf("请输入第%d个整数\n",i);
scanf("%d",&s->Ndata);
if(head==NULL)
{
head = s;
}
else
p->next = s ;
p = s ;
}
return (head);
}

2.将如下代码修改
head=(Node *)malloc(sizeof(Node));
if(!head)
{
printf("分配内存失败!\n");
exit(0);
}
head->next =NULL;
改成:head = NULL;


基本上都是链表的创建思路不是很清晰,希望在多看看书。
------解决方案--------------------


刚开始写链表的时候,边写边在纸上画画就清晰了!我就这样....

热点排行
Bad Request.