C语言链表有关问题
C语言链表问题
# include <stdio.h>
# define N 26
typedef struct letter
{
char ch;
struct letter *link;
};
mian()
{
struct letter _letter[N],*head,*p;
int i,j;
head=(struct letter *)mallo(sizeof(struct letter));
head->link=NULL;
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
p->ch=_letter[i].ch;
p->link=head->link;
p->link=p;
}
for(j=0;j<N;j++)
putchar(_letter[j].ch);
}
请问下高手们这个小程序哪有错误啊?
------解决方案--------------------
貌似主函数的的关键字打错啦吧——“mian()“!应该是main()吧!
------解决方案--------------------
很多错误
#include<stdio.h>
#include<stdlib.h>
#define N 26
typedef struct letter
{
char ch;
struct letter *link;
};
main()
{
struct letter _letter[N],*head,*p;
int i,j;
head=(struct letter *)malloc(sizeof(struct letter));
head->link=NULL;
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
_letter[i].link = head->link;
head->link = &_letter[i];
}
for(j=0;j<N;j++)
putchar(_letter[j].ch);
}
------解决方案--------------------
首先作为编程者,定义变量最好不要以下划线作为变量名的开头,为了是防止与系统定义的变量混淆。
typedef struct letter
{
char ch;
struct letter *link;
};
你的结构体没有别名,那么使用typedef 也是多余的。
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
p->ch=_letter[i].ch;
p->link=head->link;/* head ->link = p; p = p ->link;p = (struct letter *)malloc(sizeof(struct letter));也要分配空间的。*/p->link=p;
}
你定义的头节点,但是连接的时候却不是这样的。
------解决方案--------------------
1、链表操作自己测试的时候没有必要设置N为26,太大了,每次测试都要敲26个字母太麻烦
2、按照lz使用struct letter的方式来说,没有必要使用typedef。如果要使用typedef,应该这样:
struct letter
{
char ch;
struct letter *link;
};
typedef struct letter letter;
然后就可以使用letter作为struct letter这个类型了。
3、lz的意思是要设置一个头结点吧?如果lz要设置头结点,就尽量不要移动和操作头结点,否则指针操作会很乱。建立一个链表很简单,大致的步骤是分配空间,对空间中的数据域赋值,然后将这个申请的空间连入链表。具体怎么改,还是lz自己改对自己提升更快。
------解决方案--------------------
# include <stdio.h>
# define N 26
typedef struct letter
{
char ch;
struct letter *link;
};
mian()
{
struct letter _letter[N],*head,*p;
int i,j;
head=(struct letter *)mallo(sizeof(struct letter));
head->link=NULL;
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
p->ch=_letter[i].ch;
p->link=head->link;
p->link=p;
}
for(j=0;j<N;j++)
putchar(_letter[j].ch);
}
请问下高手们这个小程序哪有错误啊?
------解决方案--------------------
貌似主函数的的关键字打错啦吧——“mian()“!应该是main()吧!
------解决方案--------------------
很多错误
#include<stdio.h>
#include<stdlib.h>
#define N 26
typedef struct letter
{
char ch;
struct letter *link;
};
main()
{
struct letter _letter[N],*head,*p;
int i,j;
head=(struct letter *)malloc(sizeof(struct letter));
head->link=NULL;
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
_letter[i].link = head->link;
head->link = &_letter[i];
}
for(j=0;j<N;j++)
putchar(_letter[j].ch);
}
------解决方案--------------------
首先作为编程者,定义变量最好不要以下划线作为变量名的开头,为了是防止与系统定义的变量混淆。
typedef struct letter
{
char ch;
struct letter *link;
};
你的结构体没有别名,那么使用typedef 也是多余的。
for(i=0;i<N;i++)
{
_letter[i].ch=getchar();
p->ch=_letter[i].ch;
p->link=head->link;/* head ->link = p; p = p ->link;p = (struct letter *)malloc(sizeof(struct letter));也要分配空间的。*/p->link=p;
}
你定义的头节点,但是连接的时候却不是这样的。
------解决方案--------------------
1、链表操作自己测试的时候没有必要设置N为26,太大了,每次测试都要敲26个字母太麻烦
2、按照lz使用struct letter的方式来说,没有必要使用typedef。如果要使用typedef,应该这样:
struct letter
{
char ch;
struct letter *link;
};
typedef struct letter letter;
然后就可以使用letter作为struct letter这个类型了。
3、lz的意思是要设置一个头结点吧?如果lz要设置头结点,就尽量不要移动和操作头结点,否则指针操作会很乱。建立一个链表很简单,大致的步骤是分配空间,对空间中的数据域赋值,然后将这个申请的空间连入链表。具体怎么改,还是lz自己改对自己提升更快。
------解决方案--------------------
- C/C++ code
#include<stdio.h> #include<stdlib.h> #define N 23 typedef struct letter { char ch; struct letter *link; }; main() { struct letter _letter[N],*head,*p; int i,j; head=(struct letter *)malloc(sizeof(struct letter)); head->link=NULL; for(i=0;i<N;i++) { _letter[i].ch=getchar(); _letter[i].link = head->link; head->link = &_letter[i]; fflush(stdin); } for(j=0;j<N;j++) putchar(_letter[j].ch); printf("\n"); }