一道数据结构 用C语言建立单链表的编程题目,求助。

题目为:编一算法,建立一个带头结点的单链表,用前(头)插法实现。PS:初学,知道的朋友帮做下,满意追加分数,越简洁越好!看好,两个要求:带头结点,用前插法,别错了!... 题目为:编一算法,建立一个带头结点的单链表,用前(头)插法实现。

PS:初学,知道的朋友帮做下,满意追加分数,越简洁越好!

看好,两个要求:带头结点,用前插法, 别错了!
展开
 我来答
木芽锺
2011-05-11 · TA获得超过504个赞
知道小有建树答主
回答量:99
采纳率:100%
帮助的人:114万
展开全部
这个程序是以前做的,看起来复杂,其实是太多的判断和提示内容而已,你看看主函数,再运行一下,再看看创建链表的函数,关键部分并不多,应该不难看懂,另外模块我做的比较细,有些函数你不必理会,希望能帮到你,谢谢
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define SN 2 //科目数量(score number)
typedef struct student
{
char num[10],
name[10];
float score[SN],
sum,
avg;
struct student *next;
}STU;
/**********输入链表单元内容************/
void input(STU *p)
{
int i;
printf("please input number:\n");
scanf("%s",p->num);
printf("please input name:\n");
scanf("%s",p->name);
printf("please input %d scores:\n",SN);
p->sum=0;
for(i=0;i<SN;i++)
{
scanf("%f",&p->score[i]);
p->sum+=p->score[i];
}
p->avg=p->sum/SN;
}
/**********创建一个链表单元**********/
STU *creat_node()
{
STU *p;
p=(STU *)malloc(sizeof(STU));
if(p == NULL)
{ printf("No enough memory !");
exit(0);
}
input(p);
p->next=NULL;
return p;
}

/**********创建一个链表**********/
STU *creat_list()
{
STU *head=NULL,*p;
char str[4];
printf("List creating...\n");
do
{
printf("Do you want to continue (yes/no) :");
scanf("%s",str);
if(strcmp(str,"yes")==0)
{
p=creat_node();
if(head==NULL){head=p;continue;}
p->next=head;//前插法
head=p;
}
if(strcmp(str,"yes")!=0&&strcmp(str,"no")!=0)
{
printf("You must input 'yes' or 'no'.\n");
//getchar();
continue;
}

if(strcmp(str,"no")==0)break;
//getchar();
}while(1);
printf("List create end...\n\n");
return head;
}
/************输出一个链表头部**********/
void print_a_head()
{
int i;
printf("number\tname\tavg\tsum\t");
for(i=0;i<SN;i++)
printf("score%d\t",i+1);
putchar(10);
}
/************输出一个链表单元**********/
void print_a_node(STU *fin)
{
int i;
printf("%s;\t%s;\t%0.2f;\t%0.2f\t",fin->num,fin->name,fin->avg,fin->sum);
for(i=0;i<SN;i++)
printf("%0.2f\t",fin->score[i]);
putchar(10);
}

/************输出链表**********/
int print_list(STU *stu)
{
STU *p=stu;
if(stu==NULL)
{
printf("no records!!!\n");
return (0);
}
print_a_head();
while(p!=NULL)
{
print_a_node(p);
p=p->next;
}
putchar(10);
return (0);
}

void main()
{
STU *head;
head=creat_list();//创建链表
print_list(head);//输出链表
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式