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. 展开
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. 展开
展开全部
#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;
}
#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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询