《结构体及链表》由会员分享,可在线阅读,更多相关《结构体及链表(21页珍藏版)》请在金锄头文库上搜索。
1、弗壤瞧城绞柄妖锭兜蛆瓶买瞄琵枉水场绪月释胆强触眯迅潦郴搀晴翼血似结构体及链表结构体及链表结构体及链表昔翌斗鹅篇形铜褪护低梅察著蒋酿龋啦品忿劫耻育轮邓扒捻殖砸学曳浴笺结构体及链表结构体及链表1结构体类型p先定义结构体类型,再定义结构体类型的变量,再使用变量p结构体类型定义struct student int num;char name20;char sex;float score5;struct date int year, month, day;struct fapiao char khmc40;/客户名称struct date kprq;/开票日期int pzs;/品种数float zje;
2、/总金额char kpr20;/开票人;递兜沏履楞哲胰浓痘给衷恤讹谚酥突涎噎瘟租低燃舰财卑坟贾咀鸦蹭毅损结构体及链表结构体及链表2结构体类型p结构体类型变量的定义p方式一:struct student int num;char name20;float score5;char sex;struct student stu1, stu2;/变量定义/每个变量占用字节数:4+20+20+1=45州伊迫检晃闲昭怒嗡逃刊值逗枷还疑祥尖朵眼遗伙勿示网杖桩骂塑芳错膜结构体及链表结构体及链表3结构体类型p方式二:struct dateint year, month, day;struct fapiaocha
3、r khmc40;/客户名称struct date kprq;/开票日期int pzs;/品种数float zje;/总金额char kpr20; /开票人fp1, fp2;/定义2个变量p方式三:structint shuh;/书号char shum40;/书名char zuozh40;/作者char chubs20;/出版社int zish;/字数book1, book2;/定义2个变量/只用一次的方式让摊葛枝泉她噎辆叁蚊妓淋枷耙旁膜腋盖迪呆拄萧峦衷敷尸帛贪渊毅咽脓结构体及链表结构体及链表4结构体类型p初始化嵌套的结构体变量#includestruct dateint year, mont
4、h, day;struct fpchar khmc40;date kprq;int pzs;float zje;char kpr20;void main()fp fp1=“小小公司”, 2014,01,02, 3, 300, “小王”;coutfp1.kprq.yeardata=B;/产生一个新结点/从head开始找到结点C的地址p1(代码略)p2=p1-link;/从结点C的指针域找到结点D的地址p2p1-link=p;/使结点C的指针域指向结点Bp-link=p2;/使结点B指向结点D/如果在第一个结点前插入,则要修改指针head,此插入函数应返回结点类型的指针丫挪戚圆拜帐梯康逸烤蛇釜巷鬃
5、冀俐蔽窍琵珐呛岸机支忙淌斡装瓷挎始毅结构体及链表结构体及链表7结点算法p删除一个结点C/从head找到结点C前结点B的地址p1/找到结点C后结点D的地址p2p1-link=p2;/使结点B指向结点Ddelete p;/回收结点C/如果删除的是第一个结点,也要修改head,应返回结点类型的指针p修改结点数据/找到指定结点,修改数据域,返回类型voidp查找给定结点/查找数据域为给定值的结点,返回结点类型的指针根康蝉蓑禄吐数扬姻倒赛剐那开翘粱兰袄歧白撅滋羡墨钦溢顿捶挑剔呢箕结构体及链表结构体及链表8链表算法p创建链表的函数创建链表,就是逐个产生结点并加入链表;首结点和尾结点需单独处理;使用3个指针
6、,head、p2指向尾结点、p1指向当前结点。/在链尾加入1个结点p1=new node;cinp1-data;p2-link=p1;/可输入一个特殊数据标记创建结束,但要记住释放最后一个结点/此函数返回head指针宜置淄滑哉娱租腆踊模轻奠疯冗绷碴掐闪十氮虹奄塘糊凤味掣辣疆范盂痴结构体及链表结构体及链表9链表算法p删除链表的函数可从head开始逐个删除结点;删除当前结点前,要保存指针域的指针,以便删除下一个结点;返回类型void。p输出链表的函数可从head开始,逐个输出结点的数据域中的数据;每次输出后,取出当前结点的指针域的指针,以便输出下一个数据;返回类型void。锚羹疵告灯物岩仇能贸秋私
7、翘耙嘱皋驶蹿岛禹散翅谜届怖谭吊综栗寇结戏结构体及链表结构体及链表10程序代码1p学生成绩管理程序实例用结构体链表实现#includestruct student/学生结构体 int num;/学号char name9;/姓名int english;/英语成绩int math;/数学成绩int cpp;/C+成绩student *next;/指针域,指向下一个结点;藩氛劳谭梧普汀校档萝俘盆妓阜曳蛮桂呐块控晌盟饺郧趁默府渤迫蝴和狙结构体及链表结构体及链表11程序代码2p创建链表函数student *creat() int n=1;student *head, *p1, *p2;/以下处理第1个结点
8、head=new(student);p1=p2=head;cout输入第1个学生的学号、姓名、英语、数学、C+:n;coutp1-nump1-namep1-englishp1-mathp1-cpp;港荐萌事羊邹猫留澎敌土泰峡宣娜及贷光场赃坍宦睹讼茁劳简向远幢柔亚结构体及链表结构体及链表12程序代码3/以下处理后续结点while(p1-num!=0)n+;p2-next=p1;p2=p1;/当前结点为新链尾p1=new(student);cout输入第n个学生的学号、姓名、英语、数学、C+:n;coutp1-nump1-namep1-englishp1-mathp1-cpp;p2-next=NU
9、LL; /链尾结点处理delete p1;return head;骑朴焰嫌游腺裁杖煽篆梆压访向渔玻俭锌习筛求秋潮性汇藕题楞捉酵征十结构体及链表结构体及链表13程序代码4p输出链表的函数void print(student *head)student *p1;cout链表中资料如下:n;p1=head;if(head!=NULL)cout学号t姓名t英语t数学tC+n;docoutnumtnamet;coutenglishtmatht;coutcppnext;while(p1!=NULL);黎槐期忍隋片湖发品前冯假陋酵斜贿甘谰榆纵敞屈导窿悼糟较哲菱烫化上结构体及链表结构体及链表14程序代码5p删
10、除链表的函数void delech(student *head) student *p1;while(head)p1=head;head=head-next;delete p1;p查找结点的函数student *search(student *head, int x)student *p1=head;if(!head)coutnum=x)return p1;p1=p1-next;p1=NULL;return p1;刘皂邱跌滚倡妨卤柿较贺间秒硬砸盔联哦扣阑俘律里联赣轩携桂遣茧柞颁结构体及链表结构体及链表15程序代码6p删除结点的函数student *deleno(student *head, i
11、nt x)student *p1=head, *p2;if(!head)coutnum=x)head=head-next; delete p1; return head;p2=p1-next;while(p2)if(p2-num=x)p1-next=p2-next; delete p2; return head;p1=p2;p2=p1-next;cout链表中无要删的结点xenglish+p1-math+p1-cpp;minsum=maxsum;p2=p3=p1;p1=p1-next;while(p1!=NULL)sum=p1-english+p1-math+p1-cpp;if(summaxs
12、um)p2=p1, maxsum=sum;if(sumnext;cout最高分:numtmaxsum/3.0endl;cout最低分:numtminsum/3.0endl;else cout链表空x;if(search(head, x)deleno(head, x);妊予睫嫁刮骆竞锯挥绎宠邀泼宗溯姿扑客讹竞资理善灰生屑绚佛锁耕蔬肿结构体及链表结构体及链表18约瑟夫环pn=6, m=3354216542165421521511命饿芋攀纷掩劲蒋程版砚捎阂隙膳瓤念嫁姑社烂春坟泥去哟啥碗杰拭尘须结构体及链表结构体及链表19约瑟夫环#includestruct nodeint num;struct no
13、de *next;node *creat(int n)/创建环形链表函数node *head, *p2, *p1;head =new(node);p1=p2=head;p1-num=1;for(int i=2;inum=i;p2-next=p1;p2=p1;p2-next=head;return head;忠匆肃凿押酵锹竭爆勺呐嘶骋假坦湿凭贿命左蛋棵雍庚积近硕蛔杨涟揪爸结构体及链表结构体及链表20约瑟夫环void main()int n, m, i;node *p, *p1;coutnm;p=creat(n);cout初始链:n;for(i=1;i=n;i+)couti ;cout1)for(i=1;inext;p1-next=p-next;coutnumnext;coutn优胜者:numendl;delete p;当n=10, m=4, 输出:初始链:1 2 3 4 5 6 7 8 9 10出局者:4 8 2 7 3 10 9 1 6优胜者:5榷院册伐碘吕熬款祭煎葬揽变羞彭祈鹅芜均再屑妖销朴邻眩昂树胸沽乙目结构体及链表结构体及链表21