C语言中,怎么用使用动态链表?
在C语言中,如果要做一个成绩统计系统,需要动态分配内存.使用动态链表.如果设计这个动态链表啊?...
在C语言中,如果要做一个成绩统计系统,
需要动态分配内存.使用动态链表.
如果设计这个动态链表啊? 展开
需要动态分配内存.使用动态链表.
如果设计这个动态链表啊? 展开
3个回答
2013-07-17
展开全部
这下面是一个动态链表的C语言程序
后面有比较详细的,解析.
使用的是动态链表.
删除后,释放内存.
你可以看看.
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#define Null 0
#define Length sizeof(struct stu)
struct stu
{
int gra;
int cla; //定义年级,班级
char name[20];
long num; //定义名字,学号
float mark[6];
int bujige; //定义成绩3科,平均分1科,总分1科..不及格科目.
struct stu *next; //定义指针,方便指指向下一个结构体变量;
}*head,*h,*p1,*p2,*p3;
int n=0; //识别链表开头的开关变量
void main()
{
int i,z; //定义各个功能模块函数名
void fun1(void);
void fun2(void);
void fun3(void);
void fun4(void);
void fun5(void);
void fun6(void);
void fun9(void);
for(z=1;z>0;z++) //无限循环主菜单.
{
printf("\n"); printf("\n");
printf(" 欢迎使用Tony成绩管理系统\n");
printf("--------------请选择您要执行的任务,并输入代码--------------\n");
printf("\n");
printf("--------- 执行任务--------------------------代码-----------\n");
printf("--------- 添加新同学 ------------------------ 1 ------------\n");
printf("--------- 修改学生信息 ---------------------- 2 ------------\n");
printf("--------- 查询学生成绩 ---------------------- 3 ------------\n");
printf("--------- 不及格情况 ------------------------ 4 ------------\n");
printf("--------- 查看班级成绩表 -------------------- 5 ------------\n");
printf("--------- 删除学生信息 ---------------------- 6 ------------\n");
printf("--------- 保存当前数据 ---------------------- 9 ------------\n");
printf("--------- 退出程序 -------------------------- 0 ------------\n");
printf("\n");
printf("\n");
scanf("%d",&i); //获取任务代码
if(i==0) break; //通过开关变量,跳出这个死循环,结束程序.
else
if(i==1) fun1();
else
if(i==2) fun2();
else
if(i==3) fun3();
else
if(i==4) fun4();
else
if(i==5) fun5();
else
if(i==6) fun6();
else
if(i==9) fun9();
}
printf("执行结束,输入任意键,关闭程序\n");
}
void fun1(void)
{
printf("实现的功能模块 1 ---添加新同学\n");
p1=(struct stu *)malloc(Length); //分配内存给新建的链表
if(n==0) //判断链表开头
head=p1;
else
p2->next=p1; //构建节点
printf("请为这个新同学录入信息\n"); //录入信息
printf("年级:");
scanf("%d",&p1->gra);
printf("班级:");
scanf("%d",&p1->cla);
printf("姓名:");
scanf("%s",p1->name);
printf("学号:");
scanf("%ld",&p1->num);
printf("英语成绩:");
scanf("%f",&p1->mark[0]);
printf("数学成绩:");
scanf("%f",&p1->mark[1]);
printf("语文成绩:");
scanf("%f",&p1->mark[2]);
int i,km=0;
float sum;
for(i=0;i<3;i++) //计算平均分
{
sum=p1->mark[0]+p1->mark[1]+p1->mark[2];
p1->mark[3]=sum;
p1->mark[4]=sum/3;
}
for(i=0;i<3;i++) //统计不及格科目
{
if(p1->mark[i]<60) km=km+1;
}
p1->bujige=km;
printf("信息录入完成,如下表:\n"); //输出,录入的信息
printf("年纪:%d,班级:%d,姓名:%s,学号:%ld,\n英语:%6.2f,数学:%6.2f,语文:%6.2f,\n总分:%6.2f,平均分:%6.2f,不及格科目:%d\n",
p1->gra,p1->cla,p1->name,p1->num,p1->mark[0],p1->mark[1],
p1->mark[2],p1->mark[3],p1->mark[4],p1->bujige);
p2=p1;
p2->next=Null; //链表结束标志.
printf("输入任意键返回主菜单\n");getch();
n=n+1; // 开关变量 设计链表开头
}
后面有比较详细的,解析.
使用的是动态链表.
删除后,释放内存.
你可以看看.
#include<stdio.h>
#include<malloc.h>
#include<math.h>
#include<string.h>
#include<conio.h>
#define Null 0
#define Length sizeof(struct stu)
struct stu
{
int gra;
int cla; //定义年级,班级
char name[20];
long num; //定义名字,学号
float mark[6];
int bujige; //定义成绩3科,平均分1科,总分1科..不及格科目.
struct stu *next; //定义指针,方便指指向下一个结构体变量;
}*head,*h,*p1,*p2,*p3;
int n=0; //识别链表开头的开关变量
void main()
{
int i,z; //定义各个功能模块函数名
void fun1(void);
void fun2(void);
void fun3(void);
void fun4(void);
void fun5(void);
void fun6(void);
void fun9(void);
for(z=1;z>0;z++) //无限循环主菜单.
{
printf("\n"); printf("\n");
printf(" 欢迎使用Tony成绩管理系统\n");
printf("--------------请选择您要执行的任务,并输入代码--------------\n");
printf("\n");
printf("--------- 执行任务--------------------------代码-----------\n");
printf("--------- 添加新同学 ------------------------ 1 ------------\n");
printf("--------- 修改学生信息 ---------------------- 2 ------------\n");
printf("--------- 查询学生成绩 ---------------------- 3 ------------\n");
printf("--------- 不及格情况 ------------------------ 4 ------------\n");
printf("--------- 查看班级成绩表 -------------------- 5 ------------\n");
printf("--------- 删除学生信息 ---------------------- 6 ------------\n");
printf("--------- 保存当前数据 ---------------------- 9 ------------\n");
printf("--------- 退出程序 -------------------------- 0 ------------\n");
printf("\n");
printf("\n");
scanf("%d",&i); //获取任务代码
if(i==0) break; //通过开关变量,跳出这个死循环,结束程序.
else
if(i==1) fun1();
else
if(i==2) fun2();
else
if(i==3) fun3();
else
if(i==4) fun4();
else
if(i==5) fun5();
else
if(i==6) fun6();
else
if(i==9) fun9();
}
printf("执行结束,输入任意键,关闭程序\n");
}
void fun1(void)
{
printf("实现的功能模块 1 ---添加新同学\n");
p1=(struct stu *)malloc(Length); //分配内存给新建的链表
if(n==0) //判断链表开头
head=p1;
else
p2->next=p1; //构建节点
printf("请为这个新同学录入信息\n"); //录入信息
printf("年级:");
scanf("%d",&p1->gra);
printf("班级:");
scanf("%d",&p1->cla);
printf("姓名:");
scanf("%s",p1->name);
printf("学号:");
scanf("%ld",&p1->num);
printf("英语成绩:");
scanf("%f",&p1->mark[0]);
printf("数学成绩:");
scanf("%f",&p1->mark[1]);
printf("语文成绩:");
scanf("%f",&p1->mark[2]);
int i,km=0;
float sum;
for(i=0;i<3;i++) //计算平均分
{
sum=p1->mark[0]+p1->mark[1]+p1->mark[2];
p1->mark[3]=sum;
p1->mark[4]=sum/3;
}
for(i=0;i<3;i++) //统计不及格科目
{
if(p1->mark[i]<60) km=km+1;
}
p1->bujige=km;
printf("信息录入完成,如下表:\n"); //输出,录入的信息
printf("年纪:%d,班级:%d,姓名:%s,学号:%ld,\n英语:%6.2f,数学:%6.2f,语文:%6.2f,\n总分:%6.2f,平均分:%6.2f,不及格科目:%d\n",
p1->gra,p1->cla,p1->name,p1->num,p1->mark[0],p1->mark[1],
p1->mark[2],p1->mark[3],p1->mark[4],p1->bujige);
p2=p1;
p2->next=Null; //链表结束标志.
printf("输入任意键返回主菜单\n");getch();
n=n+1; // 开关变量 设计链表开头
}
展开全部
C语言中,动态链表的使用方法:
1、创建节点的结构体类型,里面要有一个指向此类型结构的指针。
2、建立一个头指针,一个尾指针
3、每次有新节点进入链表时,用malloc分配空间,然后用链表尾端的节点指针指向新节点,新节点的指针指向NULL。
1、创建节点的结构体类型,里面要有一个指向此类型结构的指针。
2、建立一个头指针,一个尾指针
3、每次有新节点进入链表时,用malloc分配空间,然后用链表尾端的节点指针指向新节点,新节点的指针指向NULL。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-17
展开全部
使用结构体构造链表,每次增加一个对象,就用malloc分配内存一个结构体大小的内存,并将链表指针指向这块内存。同理,删除一个对象,回收此块内存,并相应处理链表指针
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询