user-0 提问: 学生宿舍管理系统（单链表）

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

user: user-2
content: void DeleteList(NODE* head){     NODE *h,*p;     int j=0;     printf("请输入要删除的数据：\n");     p=head;     scanf("%d%s%d",&h->data.num,h->data.name,&h->data.zw);     while(j<h->data.num-1&&p!=NULL){         p=p->next;         j++;     }     if(h==NULL)         printf("无法删除数据！\n");     else         p->next=p->next->next; } 删除操作，h是野指针，不能直接用h->data.name等等； 对于删除操作，建议如下：  void DeleteList(NODE* head) {     NODE *p, *s, *pdel;     int j=0, num;      printf("请输入要删除的数据(学号）：\n");     s = head;     p = head->next;     scanf("%d",&num);      while (p && num != p->data.num) {         p = p->next;         s = s->next;     }     if (!p) {         printf("无法删除数据！\n");     } else {         s->next = p->next;         free(p);     }     /*     while(j<h.data.num-1&&p!=NULL){         p = p->next;         j++;     }     if(h==NULL)         printf("无法删除数据！\n");     else         p->next=p->next->next;     */ }  多处有用到野指针。以下的代码是修改后的参考一下吧  #include <string.h> #include <stdio.h> #include <stdlib.h> #include <malloc.h>  typedef struct{     int num;     char name[10];     int zw; }DATATYPE;  typedef struct node{     DATATYPE data;     struct node *next; }NODE;  int FullList(); void SeekList(NODE* head); void InsertList(NODE* head); void DeleteList(NODE* head); void ChangeList(NODE* head); void AllList(NODE* head);  int main() {     NODE *head,*p,*s;     int tm;     head=(NODE*)malloc(sizeof(NODE));     head->next=NULL;     s = head;     printf("请输入学生人数：\n");     scanf("%d", &tm);     while(tm--){         printf("请依次输入 学号 姓名 座号\n");         p=(NODE*)malloc(sizeof(NODE));         scanf("%d%s%d",&p->data.num,p->data.name,&p->data.zw);         s->next = p;         s = p;     }     p->next=NULL;      while(1){         switch(FullList()){             case 1:                 InsertList(head);                 break;             case 2:                 SeekList(head);                 break;             case 3:                 DeleteList(head);                 break;             case 4:                 ChangeList(head);                 break;             case 5:                 AllList(head);                 break;             default:                 break;         }     }     return 0; } int FullList(){     int t;     printf("     --------------------------|----------------|--------------------------\n");     printf("     --------------------------|学生宿舍管理系统|--------------------------\n");     printf("     --------------------------|----------------|--------------------------\n");     printf("     ----------------------------1.插入学生信息----------------------------\n");     printf("     ----------------------------2.查询学生信息----------------------------\n");     printf("     ----------------------------3.删除学生信息----------------------------\n");     printf("     ----------------------------4.更改学生信息----------------------------\n");     printf("     ----------------------------5.查看全部信息----------------------------\n");     printf("请输入序号：\n");     while(1){         scanf("%d", &t);         if(t >= 6||t<1)             printf("请重新输入\n");         else             break;     }     return t; } void SeekList(NODE* head){     int x;     char t;     int numm;     char xmm[12];     NODE *p;     p=head->next;     printf("请输入1.姓名或2.学号：\n");     while(1){         scanf("%d",&x);         if(x==1){             scanf("%s",xmm);             while(strcmp(xmm,p->data.name)!=0){                 p=p->next;             }             printf("%d,%s,%d\n",p->data.num,p->data.name,p->data.zw);         }else if(x==2){             scanf("%d",&numm);             while(numm!=p->data.num){                 p=p->next;             }             printf("%d,%s,%d\n",p->data.num,p->data.name,p->data.zw);         }else             printf("输入错误！\n");         printf("结束输入时请输入:N/n\n");         scanf("%c",&t);         if(t=='n'||t=='N')             break;     } } void InsertList(NODE *head){     NODE *s,*p;     int j=0;     p = head;     s = (NODE *)malloc(sizeof(NODE));     if (!s)         exit(0);     printf("请输入学号 姓名 座号：\n");     scanf("%d%s%d",&s->data.num,s->data.name,&s->data.zw);     while(j<s->data.num-1 && p){         p = p->next;         j++;     }     if(p==NULL){         printf("无法插入数据！\n");     }else{         s->next = p->next;         p->next = s;         printf("数据插入成功！\n");     } }  void DeleteList(NODE* head) {     NODE *p, *s;     int num;      printf("请输入要删除的数据(学号）：\n");     s = head;     p = head->next;     scanf("%d",&num);      while (p && num != p->data.num) {         p = p->next;         s = s->next;     }     if (!p) {         printf("无法删除数据！\n");     } else {         s->next = p->next;         free(p);     }     /*     while(j<h.data.num-1&&p!=NULL){         p = p->next;         j++;     }     if(h==NULL)         printf("无法删除数据！\n");     else         p->next=p->next->next;     */ }  void AllList(NODE* head){      NODE *p;     p=head->next;     while(p) {         printf("学号：%d 姓名：%s 座号：%d\n",p->data.num,p->data.name,p->data.zw);         p = p->next;     } } void ChangeList(NODE* head) {     NODE *p;     DATATYPE y;      p = head->next;     printf("请输入您要更改的信息：学号，姓名，座号\n");     scanf("%d%s%d",&y.num,y.name,&y.zw);      while (p && p->data.num != y.num) {         p = p->next;     }     if (!p) {         printf("没有找到!\n");     } else {         memcpy(&p->data, &y, sizeof(DATATYPE));     }     /*     while(t<y->data.num-1&&p!=NULL){         p=p->next;         t++;     }     y->next=p->next->next;     p->next=y;     */     printf("修改成功！\n"); }