c语言链表,非常感谢
以下程序的功能是:读入一行字符(如:a,b,…y,z),按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点...
以下程序的功能是:读入一行字符(如:a,b,… y,z),按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。请在空白处为程序选择适当的代码。1,2,3答案该是什么)
#include
#define getnode(type) ① malloc(sizeof(type))
int main(void)
{
struct node{
char info;
struct node *link;
}*top,*p;
char c;
top = NULL;
while( ( c = getchar( ) ② )
{
p = getnode ( struct node );
p -> info = c;
p -> link = top;
top = p;
}
while ( top )
{
③ ;
top = top -> link;
putchar ( p -> info );
free ( p );
}
} 展开
#include
#define getnode(type) ① malloc(sizeof(type))
int main(void)
{
struct node{
char info;
struct node *link;
}*top,*p;
char c;
top = NULL;
while( ( c = getchar( ) ② )
{
p = getnode ( struct node );
p -> info = c;
p -> link = top;
top = p;
}
while ( top )
{
③ ;
top = top -> link;
putchar ( p -> info );
free ( p );
}
} 展开
1个回答
展开全部
//WIN-TC是什么turbo? 我在DEV-C下改的,应该也没问题吧
#include<stdio.h>
#include<malloc.h>
//#define NULL 0 //不用重定义NULL把,空指针用NULL就可以
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
int n=0;
/*建立动态链表*/
/* 这个函数,有重要的问题,你在函数里创建了临时类,st,head指向它,但是当这个函数结束时,这个类会被销毁,head将是个没有指向的指针,所以当在函数中返回类时,需要堆分配内存
*/
struct student *creat(void)
{
struct student *p1=NULL,*head=NULL; // 这里一个学生类指针即可
struct student *st = (struct student *)malloc(sizeof(struct student)); //同上解释
printf("Please input records:\n");
scanf("%d%s%f",&(st->num),st->name,&(st->score));
p1=st;
p1->next = NULL;
if(st->num!=0)
head=p1;
while(p1->num!=0)
/*这个链表的创立,无非就是那些步骤,你必然明白,再不行,画个示意图就明白了,注意的是,什么时候指针赋值,什么时候用指针控制变量
*/
{n=n+1;
printf("%dEnd\n",n);
p1->next = (struct student *)malloc(sizeof(struct student));
//这句话至少得有一个“->”,需要控制变量
p1->next->next = NULL;
scanf("%d%s%f",&(p1->next->num),p1->next->name,&(p1->next->score));
if(n!=1)
{
p1 = p1->next;
}
}
printf("\nOver.\n");
/*printf("%o\n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
return(head);
}
/*输出*/
void print(struct student *head)
{
struct student *p;
p=head;
/*printf("%o\n",head);*/
getch();
//if(head==NULL)
//printf("\nList null!\n");
//else
printf("\nNow,there are %d records:\n",n);
while(p!=NULL)
{
printf("%10d%10s%10.1f\n",p->num,p->name,p->score);
p=p->next;
}
}
int main()
{
struct student *head;
head=creat();
/*printf("%o\n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
print(head);
getch();
return 0;
}
/*还有些小问题,如应该创建个销毁链表函数,使堆中内存被释放,等
但不影响达到效果,做个示意够了
*/
#include<stdio.h>
#include<malloc.h>
//#define NULL 0 //不用重定义NULL把,空指针用NULL就可以
struct student
{
int num;
char name[20];
float score;
struct student *next;
};
int n=0;
/*建立动态链表*/
/* 这个函数,有重要的问题,你在函数里创建了临时类,st,head指向它,但是当这个函数结束时,这个类会被销毁,head将是个没有指向的指针,所以当在函数中返回类时,需要堆分配内存
*/
struct student *creat(void)
{
struct student *p1=NULL,*head=NULL; // 这里一个学生类指针即可
struct student *st = (struct student *)malloc(sizeof(struct student)); //同上解释
printf("Please input records:\n");
scanf("%d%s%f",&(st->num),st->name,&(st->score));
p1=st;
p1->next = NULL;
if(st->num!=0)
head=p1;
while(p1->num!=0)
/*这个链表的创立,无非就是那些步骤,你必然明白,再不行,画个示意图就明白了,注意的是,什么时候指针赋值,什么时候用指针控制变量
*/
{n=n+1;
printf("%dEnd\n",n);
p1->next = (struct student *)malloc(sizeof(struct student));
//这句话至少得有一个“->”,需要控制变量
p1->next->next = NULL;
scanf("%d%s%f",&(p1->next->num),p1->next->name,&(p1->next->score));
if(n!=1)
{
p1 = p1->next;
}
}
printf("\nOver.\n");
/*printf("%o\n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
return(head);
}
/*输出*/
void print(struct student *head)
{
struct student *p;
p=head;
/*printf("%o\n",head);*/
getch();
//if(head==NULL)
//printf("\nList null!\n");
//else
printf("\nNow,there are %d records:\n",n);
while(p!=NULL)
{
printf("%10d%10s%10.1f\n",p->num,p->name,p->score);
p=p->next;
}
}
int main()
{
struct student *head;
head=creat();
/*printf("%o\n",head);
if(head!=NULL)
printf("%10d%10s%10.1f\n",head->num,head->name,head->score);*/
print(head);
getch();
return 0;
}
/*还有些小问题,如应该创建个销毁链表函数,使堆中内存被释放,等
但不影响达到效果,做个示意够了
*/
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询