user-0 提问: 学生链表

回复:
user: user-1
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  #define ERROR 0 #define OK 1  typedef int Status; typedef struct    //学生信息系统 {     char num[8];     char name[10];     float score; }student;  typedef student ElemType;  typedef struct LNode {     ElemType data;     struct LNode *next; }LNode,*LinkList;       //LinkList为指向结构体LNode的指针类型  Status GetElem(LinkList L,int i,ElemType &e)  //链表的取值 {      //在带头结点的单链表中L根据序号i获取元素的值,用e返回L中第i个数据元素的值     LNode *p;     int j;     p=L->next;     j=1;     while(p&&j<i)     {         p = p->next;         ++j;     }     //if(!p || j>i)     if(!p || j >= i)         return ERROR;      e=p->data;      return OK; }  LNode *LocateElem(LinkList L,ElemType e)    //链表的按值查找 {     LNode *p;     p = L->next;     //while(p && p->data.name!=e.name)     while(p && strcmp(p->data.name, e.name))         p = p->next;      return p; }  Status ListInsert(LinkList &L,int i,ElemType e)   //链表的插入操作 {         //在带头结点的单链表L中第i个位置插入值为e的新结点     LNode *p=L,*s;     int j=0;      //while(p && (j > i-1))     while(p && (j < i-1))     {         p = p->next;         ++j;     }     //if(!p||j>i-1)     if(!p || j > i-1)         return ERROR;      s = new LNode;     s->data = e;     s->next = p->next;     p->next = s;      return OK; }  Status ListDelete(LinkList &L,int i)   //链表的删除操作 {      //在带头结点的单链表L中,删除第i个元素     LNode *p=L,*q;     int j=0;      while((p->next) && (j < i-1))     {         p = p->next;         ++j;     }     //if(!(p->next)||(j>i-1))     if(!(p->next)||(j>=i-1))         return ERROR;     q = p->next;     p->next = q->next;     delete q;      return OK; }  int CreateList_H(LinkList &L,int n)    //前插法创建单链表 {      //逆位序输入n个元素的值,建立带表头结点的单链表     int i;     LNode *p;      L = new LNode;     L->next = NULL;     for(i=0;i<n;i++)     {         p=new LNode;         printf("学号:");         scanf("%s",p->data.num);         printf("\n");         getchar();         printf("姓名:");         scanf("%s",p->data.name);         printf("\n");         printf("成绩:");         //scanf("%.2f", &p->data.score);         scanf("%f", &p->data.score);         p->next=L->next;         L->next=p;     }     printf("\n");     return OK; }  //void main() int main() {     LinkList L;     int k,m,x,y,choose,temp,z;     ElemType a,b,c;     LNode *p1;     printf("\t\t\t欢迎进入学生的信息系统\n");     printf("**************************************************************\n");     printf("\t\t1.根据指定学生个数，输入学生信息\n");     printf("\t\t2.逐个显示表中所有学生的相关信息\n");     printf("\t\t3.根据姓名进行查找，返回此学生的学号和成绩\n");     printf("\t\t4.根据指定的位置返回相应的学生信息\n");     printf("\t\t5.给定一个学生信息，插入到表中指定的位置\n");     printf("\t\t6.删除指定位置的学生记录\n");     printf("\t\t7.统计表中学生个数\n");     printf("\t\t8.运行结束退出程序\n");     printf("**************************************************************\n");     //从循环中拿出一个     printf("请输入你的选择:\n");     scanf("%d", &choose);     while(choose)     {         if(choose>8)             printf("输入错误！\n");          switch(choose)         {             case 1:                 printf("\t\t1.根据指定学生个数，输入学生信息\n");                 printf("请输入学生的人数:\n");                 scanf("%d",&m);                 printf("\n");                 if (CreateList_H(L,m))                     printf("输入成功！\n");                 else                     printf("输入失败！\n");                 break;              case 2:                 printf("\t\t2.逐个显示表中所有学生的相关信息\n");                 p1 = L->next;    //初始化p1                 //for(k=0;k<m;*(++p1),k++)                 for(k=0; k<m; p1=p1->next, k++)                 {                     printf("第%d个学生的信息:",k+1);                     printf("学号:%s",p1->data.num);                     printf("名字:%s",p1->data.name);                     printf("成绩:%.2f",p1->data.score);                 }                 printf("\n");                 break;              case 3:                 printf("\t\t3.根据姓名进行查找，返回此学生的学号和成绩\n");                 printf("请输入要查找的姓名:");                 //scanf("%s",&a.name);                 scanf("%s", a.name);                 p1=LocateElem(L,a);                 if (!p1) {                     printf("Not find it named %s!\n", a.name);                     break;                 }                 printf("学号:%s\t", p1->data.num);                 printf("成绩:%.2f\n",p1->data.score);                 break;              case 4:                 printf("\t\t4.根据指定的位置返回相应的学生信息\n");                 printf("请输入指定的位置:");                 scanf("%d", &x);                 temp=GetElem(L,x,b);                 if(temp)                     printf("学号:%s,姓名:%s,成绩:%.2f\n",b.num,b.name,b.score);                 break;              case 5:                 printf("\t\t5.给定一个学生信息，插入到表中指定的位置\n");                 printf("请输入要插入的位置:\n");                 scanf("%d",&y);                 printf("请输入要插入的信息:\n");                 printf("学号:");                 //scanf("%s",&c.num);                 scanf("%s", c.num);                 printf("姓名:");                 //scanf("%s",&c.name);                 scanf("%s", c.name);                 printf("成绩:");                 //scanf("%d", &c.score);                 scanf("%f", &c.score);                  if(ListInsert(L,y,c))                 {                     printf("插入成功！\n");                     ++m;                 }                 else                     printf("插入失败！\n");                 break;              case 6:                 printf("\t\t6.删除指定位置的学生记录\n");                 printf("请输入要删除的位置:");                 scanf("%d",&z);                 if(ListDelete(L,z))                 {                     printf("删除成功！\n");                     --m;                 }                 printf("删除失败！\n");                 break;              case 7:                 printf("\t\t7.统计表中学生个数\n");                 printf("统计后学生的个数为:%d\n",m);                 break;             case 8:                 printf("\t\t8.运行结束退出程序\n");                 printf("\n退出系统成功！ 请按任意键结束！\n");                 exit(0);                 break;         }         printf("请输入你的选择:\n");         scanf("%d",&choose);     }      return 0; }  供参考～  建议对比一下代码找出自己的问题～

user: user-2
content: 数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

user: user-3
content: 在主函数的while前把choose赋个1值，就能运行了起来了，其他对不对不清楚

user: user-0
content: 引用 1 楼 阿大古 古古古的回复:在主函数的while前把choose赋个1值，就能运行了起来了，其他对不对不清楚 我在while有赋值

user: user-0
content: 我运行了，为啥输出信息(case 2)的时候，顺序是倒过来的，能改成正序的不？