Board logo

标题: [讨论]关于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()==&#39;y&#39;)
  {
   
    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 &#39;s&#39;: creat();yindao();
    case &#39;i&#39;: insert(head);
    case &#39;c&#39;: 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