2單鏈表實驗答案_第1頁
2單鏈表實驗答案_第2頁
2單鏈表實驗答案_第3頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、上機實驗題1. 創(chuàng)建一個單鏈表 L(包含頭結點),寫一算法將其倒置,并將對應的程序調試運行通過。要求:鏈表的長度可以由用戶自行確定,不要倒置頭結點。#include <stdio.h>#include <stdlib.h>#define OVERFLOW-2#define OK1typedef int ElemType;typedef int Status;typedef struct LNodeElemType data;struct LNode *next;LNode, *LinkList;Status ReverseLinklist(LinkList &L

2、)/倒置單鏈表時不倒置頭結點LNode *p, *q;p=L->next->next;/*p 指向鏈表的開始結點之后的結點*/L->next->next=NULL;/將原鏈表一分為二,一個是用頭結點和/鏈表的開始結點組成新鏈表,另外一個是原鏈表的剩余部分while (p)q=p; /每次從第二個鏈表中取出開始結點,其地址用 q紀錄 p=p->next;q->next=L->next; /將 q指向結點插入到新鏈表的頭結點之后L->next=q;return OK;Status InitLinklist(LinkList &L)/初始化單鏈

3、表LNode *p=(LinkList)malloc(sizeof(LNode);if (!p) exit(OVERFLOW);L=p;p->next = NULL;/生成一個帶頭結點的空鏈表return OK;Status CreateLinklist(LinkList &L)/根據(jù)用戶輸入來創(chuàng)建單鏈表int n;LNode *p, *q;q=L;while (1)printf( "Please enter the next data element of the list: "); scanf("%d" , &n);if (n!

4、= -1)/當用戶輸入 -1時,停止輸入數(shù)據(jù)元素p=(LinkList)malloc( sizeof(LNode);if (!p) exit(OVERFLOW);p->data = n;p->next=NULL;q->next=p;q=p;elsebreak;return OK;Status PrintLinklist(LinkList L) LNode *p;p=L->next;if (p=NULL)printf( "This list is empty." );elsewhile (p!=NULL)/此句和下句僅為檢驗結果輸出而加/打印逆置后的單

5、鏈表printf( "%dp=p->next;", p->data);return OK;Status main()LinkList L;InitLinklist(L);/初始化單鏈表CreateLinklist(L);/創(chuàng)建單鏈表printf( "Before link reversing.n" );PrintLinklist(L);/打印單鏈表ReverseLinklist(L);/對單鏈表進行逆置printf( "nAfter link reversing.n" );PrintLinklist(L);getchar(

6、);getchar();return OK;2. 已知線性表 C= a 1, b1, a2, b2, ,an,bn ,采用單鏈表 L (包含頭結點)存放,寫一算法將其拆分成兩個線性表(分別用帶頭結點的單鏈表存放),使得:A=a 1, a2,an,B=b 1,b2,bn并將對應的程序調試運行通過。#include <stdio.h>#include <stdlib.h>#define OVERFLOW-2#define OK1typedef int ElemType;typedef int Status;typedef struct LNodeElemType data;

7、struct LNode *next;LNode, *LinkList;Status InitLinklist(LinkList &L)/初始化單鏈表LNode *p=(LinkList)malloc(sizeof(LNode);if (!p) exit(OVERFLOW);L=p;p->next = NULL;/生成一個帶頭結點的空鏈表return OK;Status CreateLinklist(LinkList &L)/根據(jù)用戶輸入來創(chuàng)建單鏈表int n;LNode *p, *q;q=L;while (1)printf( "Please enter the

8、 next data element of the list: "); scanf("%d" , &n);if (n!= -1)/當用戶輸入 -1時,停止輸入數(shù)據(jù)元素p=(LinkList)malloc( sizeof(LNode);if (!p) exit(OVERFLOW);p->data = n;p->next=NULL;q->next=p;q=p;elsebreak;return OK;Status PrintLinklist(LinkList L) LNode *p;p=L->next;if (p=NULL)printf(

9、 "This list is empty." );elsewhile (p!=NULL)printf( "%d", p->data);p=p->next;return OK;Status SplitLinklist(LinkList &L, LinkList &La, LinkList &Lb) LinkList pa = La, pb = Lb, p = L->next;/pa指向 La中的最后一個結點,p/指向 L 中的第一個結點int counter = 1;/計數(shù)器 ,奇數(shù)位上結點加入La,偶數(shù)位上結點加

10、/入 Lbwhile (p)/線性表非空L->next = p->next;/將當前結點從L 中摘下來p->next = NULL;/此結點將成為La或 Lb中的最后一個結點if (counter % 2) = 1)/ 將此結點加入Lapa->next=p;pa=pa->next;else / counter%2 = 0,將此結點加入Lbpb->next=p;pb=pb->next;p=L->next;counter+;return OK;Status main()LinkList L, La, Lb;InitLinklist(L);InitLinklist(La);InitLinklist(Lb);CreateLinklist(L);printf( "The original linklist :");PrintLinklist(L);printf( "is to be split into two.n" );SplitLinklist(L, La,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論