- 帖子
- 176
- 积分
- 477
- 威望
- 758
- 金钱
- 638
- 在线时间
- 0 小时
|
[讨论]关于C语言动态链表的问题
议题作者:Neeke
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)
小弟写了一个C语言的学生信息管理系统,要求动态存储,不能用数组(数据的好写,已经搞定),使用函数以及指针,要有录入数据,插入数据,删除数据,数据查看,按平均成绩排序功能。由于小弟不才,现在只写出了录入和查看功能,指针太多了,后面不会写了(不知道该怎么指了 --!)懂的朋友麻烦帮帮忙理理思路,先谢谢各位了!以下是源码:
/****
作者:neeke
时间:20071003
描述:学生信息管理系统
备注:写的好!
*****/
#include<stdio.h>
#include<malloc.h>
#define NULL 0 //预定义NULL为0
#define ST sizeof(struct student) //预定义ST为sizeof(struct student)
int n; //全局变量
struct student //声明结构体student包含学号,姓名,语文成绩,数学成绩,英语成绩
{
long num;
char name[15];
float chs;
float math;
float eng;
struct student *next;
};
struct student *head;
struct student *creat(void) //声明一个返回值为指针类型的函数,带回一个指向链表头的指针
{
void yindao(); //声明引导函数
struct student *p1,*p2; //声明链表指针
n=0;
fflush(stdin); //清空缓冲区
p1=p2=(struct student *) malloc(ST); //开辟新单元
system("cls"); //清屏
printf("是否开始?(y/n)\n");
while(getchar()=='y')
{
p1=(struct student *)malloc(ST);
printf("请输入学生学号:");
scanf("%ld",&p1->num);
fflush(stdin);
printf("请输入学生姓名:");
scanf("%s",&p1->name);
fflush(stdin);
printf("请输入学生语文成绩:");
scanf("%f",&p1->chs);
fflush(stdin);
printf("请输入学生数学成绩:");
scanf("%f",&p1->math);
fflush(stdin);
printf("请输入学生英语成绩:");
scanf("%f",&p1->eng);
fflush(stdin);
if(n==0)head=p1; //当n为0时,把p1赋予head
else p2->next=p1; //否则,前一链尾指向后一链头
p2=p1; //p1指向下一链
n=n+1;
printf("是否继续?(y/n)\n");
};
p2->next=NULL; //输入结束,链表尾至空,链表结束
return(head); //返回头指针
}
void print(struct student *head) //声明数据查看函数,接收头指针
{
struct student *p;
printf("\n%d条记录分别是:\n",n);
p=head; //p指向头指针
if(head!=NULL) //当头指针不为空就执行
do
{
printf("学号:%ld 姓名:%s 语文:%f 数学:%f 英语:%f\n",p->num,p->name,p->chs,p->math,p->eng);
p=p->next;
}while(p!=NULL); //当p指针为空,即指向链表尾时停止循环
}
void main()
{
void yindao(); //声明引导函数
yindao(); //调用
}
void yindao() //声明引导函数
{
struct student *w;
struct student *creat(void); //声明建表函数
char a;
void insert(struct student *x);
void print(struct student *head);
system("cls"); //清屏
printf("\t***********\n"); //版权信息
printf("\t 学生信息管理系统\n");
printf("\t 版权所有 翻版必究\n");
printf("\t By:Neeke\n");
printf("\t***********\n");
printf("*************************************\n"); //用户界面
printf(" *********开始录入(s)********* \n");
printf(" *********插入数据(i)********* \n");
printf(" *********删除数据(d)********* \n");
printf(" *********查看数据(c)********* \n");
printf(" *********退出系统(e)********* \n");
printf("*************************************\n");
fflush(stdin);
a=getchar();
switch(a) //等待用户选择
{
case 's': creat();yindao();
case 'i': insert(head);
case 'c': print(head);yindao();
}
}
void insert(struct student *x)
{
}
请各位只需要帮我提提思路,最好不要直接给我写好的源码。我希望我自己能写出来,毕竟这样理解的更深些!朋友多了路好走!
帖子8 精华0 积分21 阅读权限40 性别男 来自陕西 在线时间6 小时 注册时间2007-6-13 最后登录2008-7-21 查看个人网站
查看详细资料TOP 软件项目外包
wzt
荣誉会员
|
|