Google
 
资源下载 | 发布源码资源

已解决问题
关于C语言链表的操作实例
 
问题补充: 有这样一个结构体 char team//队伍名 int jifen//积分 int win//胜利场数 int lost//失利场数 现在有N个队伍,想把一个队伍信息存入一个链表结点,可增加删除队伍,修改队伍信息,用链表具体怎么实现。本人一直对链表不太清楚,想通过此例理解链表,谢谢各位高手赐教,最好注释详细,谢谢!
提问者:tomore  提问时间:08-10-20 20:29  
 最佳答案
 的答案  ( 采纳时间: 70-01-01 08:00 )

 评论  回答时间: 70-01-01 08:00 
其他答案 (1)

一般连表程序在c语言中要用link list来实现,我贴一个我写的程序在这里,可以运行,这个程序里包含一个structer纪录学生信息,学生号码已极学生姓名,纪录通过insert_node添加,通过delete_node删除,并在最开始的时候通过create list function来创建最原始的数据,不用理会里面的reverse function。 #include <stdio.h> #include <stdlib.h> struct list { int num; char name[10]; struct list *next; }; typedef struct list node; typedef node *link; link find_node_loc(link ptr, link ptr1, int reversed) { link ptr0=ptr; link ptr2=NULL; if(reversed) { while(ptr0!=NULL && (ptr0->num > ptr1->num)) { ptr2=ptr0; ptr0=ptr0->next; } } else { while(ptr0!=NULL && (ptr0->num < ptr1->num)) { ptr2=ptr0; ptr0=ptr0->next; } } return ptr2; } link find_node(link head,int IDnum) { link ptr; ptr=head; while (ptr!=NULL) { if(ptr->num==IDnum) return ptr; ptr=ptr->next; } return ptr; } void free_list(link head) { link ptr; while(head!=NULL) { ptr=head; head=head->next; free(ptr); } } link create_list() { link insert_node( link head, link ptr, link newnode); link p1,p2; link head; link ptrf; int panduan=1; int number=1; int reversed=0; head=(link)malloc(sizeof(node)); if(!head){ printf("Memory Allocation Fail! n"); exit(1); } else{ head->num=NULL; printf("Please enter the %d student ID==> ",number); scanf("%d",&panduan); while(panduan!=0){ if (number==1){ head->num=panduan; printf("Please enter the new student name==> "); scanf("%s",&head->name); head->next=NULL; number++; } else{ printf("Please enter the %d student ID==> ",number); scanf("%d",&panduan); if(panduan!=0){ p1=(link)malloc(sizeof(node)); p1->num=panduan; printf("Please enter the new student name==> "); scanf("%s",&p1->name); p1->next=NULL; number++; p2=p1; ptrf = find_node_loc(head, p2, 0); head=insert_node(head,ptrf,p2); } } } return head; } } void print_list(link ptr) { int i=1; while(ptr!=NULL){ printf("Student %dn",i++); printf("ID number:%dn",ptr->num); printf("Student name:%sn",ptr->name); printf("n"); ptr=ptr->next; } } link insert_node(link head,link ptr, link newnode) { link pt1; if (ptr!=NULL){ if(ptr->next!=NULL){ pt1=ptr->next; ptr->next=newnode; newnode->next=pt1;} else{ ptr->next=newnode; newnode->next=NULL; } } else{ pt1=head; head=newnode; head->next=pt1; } return head; } link reverse(link newhead,int reversed){ link ptr1,ptr2,newhead1; newhead1=newhead; do{ newhead=newhead->next; }while(newhead->next!=NULL); do{ ptr1=newhead1; newhead1=newhead1->next; ptr2=find_node_loc(newhead,ptr1,reversed%2); newhead=insert_node(newhead,ptr2,ptr1); }while(newhead1!=newhead); return newhead; } link delete_node(link head, link ptr,link ptr1) { link ptr2; if(ptr!=head){ if(ptr->next==NULL){ ptr1->next=NULL; free(ptr); } else{ ptr2=ptr->next; free(ptr); ptr1->next=ptr2; } } else{ head=ptr->next; free(ptr); } return head; } int main() { link head,ptr,newnode,ptr1; int flag=1,reversed=0; int IDnum,i; head=create_list(); if(head->num==NULL){ printf("You didnt create a list,try againn"); getchar(); getchar(); } else{ ptr=head; printf("nnStudent Records Created!nn"); flag=1; while(flag) { printf("n******************************************n"); printf("1: Insert new student recordn"); printf("2: Delete student recordn"); printf("3: Display students recordn"); printf("4: Reverse student recordn"); printf("0: Quitn"); printf("nPlease select a option to maintain the student record:n"); scanf("%d",&i); switch(i) { case 0: { flag=0; break; } case 1: { newnode=(link)malloc(sizeof(node)); if(!newnode) { printf("Memory Allocation Fail! n"); exit(1); } else newnode->next=NULL; printf("Please enter the new student ID==> "); scanf("%d",&newnode->num); printf("Please enter the new student name==> "); scanf("%s",&newnode->name); ptr = find_node_loc(head, newnode, reversed%2); head = insert_node(head, ptr, newnode); if (!head) { printf("Memory Allocation Fail! n"); exit(1); } printf("n**********************************************"); printf("nStudent record after insertion:nn"); print_list(head); printf("**********************************************"); break; } case 2: { printf("reversed:%d",reversed); printf("Which student you want to delete? (ID)==>"); scanf("%d",&IDnum); if(IDnum) { ptr=find_node(head,IDnum); ptr1=find_node_loc(head,ptr,reversed%2); if(!ptr) printf("no recordn"); else { head=delete_node(head,ptr,ptr1); printf("n**********************************************"); printf("nStudent record after deleted node:n"); print_list(head); printf("**********************************************"); } break; } else exit(1); } case 3: { print_list(head); break; } case 4: reversed++; head=reverse(head,reversed); print_list(head); break; default: printf("Wrong input! Please input a number in (0-3)"); } } } return 0; }
0 评论  回答时间: 1224510824 


关于我们 - 广告服务 - 联系我们 - 网站声明 - Archiver - WAP - TOP
Copyright (c) 2001-2010 kkbar.com. All rights reserved.  京ICP备10020589号