c语言链表插入的问题

学号(num)姓名(name)成绩(grade)02Lin9203Zhang871)定义一个结构体数组表示表示学生成绩登记表,其中的每个元素一次存放表1中各学生的情况。结... 学号 (num) 姓名 (name) 成绩 (grade)
02 Lin 92
03 Zhan g 87
1) 定义一个结构体数组表示表示学生成绩登记表,其中的每个元素一次存放表1中各学生的情况。
结构体类型为
struct student
{ int num;
char name[10];
int grade;
};
2) 对于表1的学生成绩登记表,依次将每个学生的情况作为一个结点插入到链表的表头(即当前插入的结点将成为链表中的第一个结点)。初始的链表为空,即该链表的头指针为空。
每一个学生情况结点结构体类型为
struct stunode
{ int num;
char name[10];
int grade;
struct student *next;
};
3) 当所有学生情况都插入到链表后,从头指针开始,依次输出链表中各结点值(即每个学生的情况)。输出格式如同表1所示,但不要表中框线。
方法说明:
为了每个学生情况的结点p动态分配存储空间,可以用如下语句:
p=(struct stunode *)malloc(sizeof(sttruct stunode))
其中p为结构体类型指针struct stunode的指针。
另外,为了使用函数malloc(),要求包含头文件stdlib.h.
展开
 我来答
百度网友bd4cf2a31
2011-09-07 · TA获得超过332个赞
知道小有建树答主
回答量:333
采纳率:100%
帮助的人:349万
展开全部
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct
{
int num;
char name[10];
int grade;
}student;

typedef struct node
{
student date;
struct node *next;
}*link;

link head = NULL;
student creat(void)
{
student p;
printf("请输入学生学号:");
setbuf(stdin,(char *)0);
scanf("%d",&p.num);
printf("请输入学生名字:");
setbuf(stdin,(char *)0);
scanf("%s",p.name);
printf("请输入学生成绩:");
setbuf(stdin,(char *)0);
scanf("%d",&p.grade);
return p;
}

void insert(student date)
{
link p = (struct node*)malloc(sizeof *p);
p->date=date;
p->next=head;
head=p;
}

void output(void)
{
link p = head;
printf("|----学号-----姓名-------成绩--|\n");
while(p!=NULL)
{
printf("| %-9d%-11s%-6d|\n",p->date.num,p->date.name,p->date.grade);
p=p->next;
}
printf("|------------------------------|\n");
}
void init(void)
{
puts("*************欢迎使用信息查询系统*************");
puts("*\t+-------------------------+ *");
puts("*\t| 1.添加记录 | *");
puts("*\t| 2.显示所有记录 | *");
puts("*\t| 0.保存退出 | *");
puts("*\t+-------------------------+ *");
puts("********************************************");
printf("\t请输入您的选择:");
}

int main()
{
int n;
char cmd[10];
do{
//system("cls");
men: init();
setbuf(stdin,(char *)0);//清空输入流
scanf("%[^\n]",cmd);//接受除换行以外的所有字符存入cmd中,并加上'\0'标志
sscanf(cmd,"%d",&n);
/*处理当命令不符合条件的情况*/
if(strlen(cmd) != 1 || n < 0 || n >2 || !(*cmd >= '0' && *cmd <= '2'))
{
printf("\t输入错误或没有这个选项!");
getchar();
getchar();
goto men;
}
switch(n)
{
case 1:insert(creat());puts("\t添加成功!");break;
case 2:output();break;
case 0: return 0;
default :break;
}
printf("\tPress Enter To Continue!");
getchar();
getchar();
}while(n != 0);
return 0;
}
稻草人天堂
2011-09-07 · 超过21用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:72.9万
展开全部
太复杂了,C早忘了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1045127526
2011-09-08
知道答主
回答量:7
采纳率:0%
帮助的人:1.2万
展开全部
ikhgsahdua
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式