标题:
[讨论]关于C语言动态链表的问题
[打印本页]
作者:
jjcd
时间:
2008-7-25 13:50
标题:
[讨论]关于C语言动态链表的问题
[讨论]关于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
荣誉会员
作者:
Asker
时间:
2008-7-25 13:50
建议你还是先把链表的一些基础操作,比如填加,删除接点,便利等等都自己写会了,在来写这个东西把
帖子19 精华
2
积分3263 阅读权限100 性别男 在线时间33 小时 注册时间2006-10-18 最后登录2008-7-24
查看个人网站
查看详细资料
TOP
爱要怎么说出口
sudami
大米米
运维管理组
作者:
tony仔
时间:
2008-7-25 13:50
对于动态的,或者用链表,或者用vector。
另外建议将部分指针改为引用,多看看数据结构的书和上面的例子。。。WINDOWS内核疯狂爱好者
帖子243 精华
6
积分5537 阅读权限150 性别男 在线时间1115 小时 注册时间2007-1-10 最后登录2008-7-24
查看个人网站
查看详细资料
TOP
赚更多的钱
wantong
晶莹剔透§烈日灼然
作者:
虎儿
时间:
2008-7-25 13:50
我觉得行先把文件的读写等看好.链表的操作当然是很重要的.
帖子2 精华
0
积分9 阅读权限40 性别男 在线时间18 小时 注册时间2007-10-2 最后登录2007-11-30
查看详细资料
TOP
neeke
晶莹剔透§烈日灼然
作者:
盈盈
时间:
2008-7-25 13:50
嗯 谢谢各位的指教了 其实后面的功能如何实现我能想通,比如插入新数据时候指针该指向链表哪一个地方。但是一动手去写,写着写着就晕了,貌似自己没耐心写。。。。汗。。。
有些东西能想出来,但是真正写就。。。。
郁闷。。朋友多了路好走!
帖子8 精华
0
积分21 阅读权限40 性别男 来自陕西 在线时间6 小时 注册时间2007-6-13 最后登录2008-7-21
查看个人网站
查看详细资料
TOP
软件项目外包
louwangzhiyu
晶莹剔透§烈日灼然
作者:
树仔
时间:
2008-7-25 13:50
我的看法,画一个流程图是好的.水中没有痕迹,但漏网之鱼已游过
帖子5 精华
0
积分20 阅读权限40 性别男 来自陕西 在线时间9 小时 注册时间2007-1-12 最后登录2008-7-24
查看个人网站
查看详细资料
TOP
让女孩一夜变的更有女人味
hack1125
晶莹剔透§烈日灼然
欢迎光临 【3.A.S.T】网络安全爱好者 (http://3ast.com/)
Powered by Discuz! 7.2