![北京交通大學(xué)-數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)1_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/8/ed78fe1a-c5aa-4750-a328-b91402f277c4/ed78fe1a-c5aa-4750-a328-b91402f277c41.gif)
![北京交通大學(xué)-數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)1_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/8/ed78fe1a-c5aa-4750-a328-b91402f277c4/ed78fe1a-c5aa-4750-a328-b91402f277c42.gif)
![北京交通大學(xué)-數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)1_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/8/ed78fe1a-c5aa-4750-a328-b91402f277c4/ed78fe1a-c5aa-4750-a328-b91402f277c43.gif)
![北京交通大學(xué)-數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)1_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/8/ed78fe1a-c5aa-4750-a328-b91402f277c4/ed78fe1a-c5aa-4750-a328-b91402f277c44.gif)
![北京交通大學(xué)-數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)1_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/8/ed78fe1a-c5aa-4750-a328-b91402f277c4/ed78fe1a-c5aa-4750-a328-b91402f277c45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、數(shù)據(jù)結(jié)構(gòu)上機(jī)實(shí)驗(yàn)一 實(shí)驗(yàn)內(nèi)容:單鏈表的基本操作實(shí)驗(yàn)要求: 1)鏈表的顯示要作為函數(shù)被調(diào)用. 2)把自己使用的單鏈表結(jié)構(gòu)明確的表達(dá)出來.3)要求都是帶頭結(jié)點(diǎn)的單鏈表.分組要求:可單獨(dú)完成,也可兩人一組。實(shí)驗(yàn)?zāi)康? 1)熟悉C/C+基本編程,培養(yǎng)動(dòng)手能力. 2)通過實(shí)驗(yàn),加深對(duì)鏈表的理解.評(píng)分標(biāo)準(zhǔn): 1) 第一題必做; 2)其它題為選做,不設(shè)上限。3)上機(jī)結(jié)束后,由助教檢查結(jié)果并適當(dāng)提問,根據(jù)情況給出成績(jī)。上機(jī)題目:一)建立單鏈表+求長(zhǎng)度+顯示(3分) (1) 由鍵盤逐個(gè)輸入正整數(shù),建立相應(yīng)的鏈表,輸入-1時(shí),鏈表結(jié)束; (2) 顯示鏈表中的元素 (要求在顯示器可見); (3) 求鏈表的
2、長(zhǎng)度;(4)求鏈表的第i個(gè)元素;(i為參數(shù))二)查找+插入+刪除+顯示 (1分) 在題目(一)的單鏈表中:(1)在鏈表中第i個(gè)位置插入新的數(shù)據(jù)元素,顯示鏈表;(2)刪除鏈表的第i個(gè)元素,輸出該元素,顯示鏈表;三)就地置逆+求最大最小值(1分) 在題目(一)的單鏈表中:(1)將鏈表就地逆置 ,顯示鏈表; (2)求鏈表中的最大,最小值,顯示結(jié)果;#include<stdio.h>#include<malloc.h>#include<stdlib.h>#define NULL 0#define ERROR 0#define OK 1typedef int stat
3、us;typedef int elemtype;typedef struct LNodeelemtype data;struct LNode *next;LNode,*LinkList;CreatList_L(LinkList &L,int n)LinkList p, q;int i=0; L=(LinkList)malloc(sizeof(LNode); if(!L) exit(0); q=(LinkList)malloc(sizeof(LNode); if(!q) exit(0); L->next=q; printf("請(qǐng)輸入一個(gè)元素:n"); scanf
4、("%d", &q->data); p=q; while (q->data != -1)q = (LinkList)malloc(sizeof(LNode);if(!q) exit(0); printf("請(qǐng)輸入另一個(gè)元素:n"); scanf("%d", &q->data); p->next=q; p=q; i+; p->next=NULL; printf("鏈表長(zhǎng)度為: %dn",i); return OK;void print(LinkList&L)Lin
5、kList p =L->next;while(p!=NULL && p->data!=-1)printf("%3d",p->data);p = p->next;printf("n");status ListInsert_L(LinkList &L,int i,elemtype &e)int j=0;LinkList p,q;p=L;while(p&&j<i-1) p=p->next;j+;q=(LinkList)malloc(sizeof(LNode);q->dat
6、a=e;q->next=p->next;p->next=q;return 1;status ListDelet_L(LinkList &L,int i,elemtype &e)LinkList p,q;int j=0;p=L;while(p&&j<i) q=p; p=p->next;j+;e=p->data;q->next=q->next->next;free(p);return e;status GetElem_L(LinkList L,int i,elemtype &e)LinkList p;in
7、t j;p=L->next;j=1;while(p&&(j<i)p=p->next;j+;if(!p|j>i)return ERROR;e=p->data;return OK;status ListReverse(LinkList &L)LinkList t,p,q; t=L->next; p=t->next; t->next=NULL;while(p!=NULL)q=p->next; p->next=t; t=p; p=q; L=t; return OK; void MostList(LinkList L)L
8、inkList p;int i,j;p=L->next;i=j=p->data;while(p)if(i<p->data)i=p->data;if(j>p->data)j=p->data;p=p->next;printf("最大值為:%dn",i);printf("最小值為:%dn",j);void main()LinkList L;int n,e,k,m,i;CreatList_L(L,n);print(L);printf("逆置后的單鏈表為:n");ListReverse(L)
9、;print(L);printf("請(qǐng)輸入要插入的數(shù)據(jù):n");scanf("%d",&e);printf("請(qǐng)輸入要插入元素的位置:n");scanf("%d",&n);ListInsert_L(L,n,e);print(L);printf("請(qǐng)輸入要?jiǎng)h除的數(shù)據(jù)的位置:n");scanf("%d",&n);printf("被刪除的元素是:n");k=ListDelet_L(L,n,k);printf("%dn"
10、,k);printf("刪除后的單鏈表為:n");print(L);printf("請(qǐng)輸入所要顯示的元素的位置:n");scanf("%d",&i);printf("所取出的元素是:n");GetElem_L(L,i,m);printf("%dn",m);MostList(L);四) 鏈表的合并(1分) (1)創(chuàng)建兩個(gè)鏈表LA,LB(各鏈表按升序排列),分別顯示兩鏈表; (2)將兩個(gè)鏈表合并成一個(gè)新的有序表(升序排列),顯示鏈表.#include<stdio.h>#inclu
11、de<stdlib.h>typedef char datatype;typedef struct node datatype data; struct node *next;listnode;typedef listnode *linklist;void main() linklist creatlist(); void printlist(linklist); linklist listadd(linklist,linklist); linklist la=creatlist(); linklist lb=creatlist(); /printlist(la); /printli
12、st(lb); linklist lc=listadd(la,lb); printf("合并后的單鏈表為:n"); printlist(lc);linklist creatlist()/創(chuàng)建單鏈表 char ch; linklist head=(linklist)malloc(sizeof(listnode); linklist p,q; q=head; while(ch=getchar()!='n') p=(linklist)malloc(sizeof(listnode); p->data=ch; q->next=p; q=p; q->n
13、ext=NULL; return head;void printlist(linklist head)/輸出單鏈表 linklist p; for(p=head->next;p;p=p->next) printf("%c ",p->data); printf("n");linklist listadd(linklist la,linklist lb)/兩鏈表合并 linklist pb,pa,p,q; linklist head=(linklist)malloc(sizeof(listnode); q=head; for(pa=la-&
14、gt;next,pb=lb->next;pa&&pb;) if(pa->data>pb->data) p=(linklist)malloc(sizeof(listnode); p->data=pb->data; q->next=p; q=p; pb=pb->next; else if(pa->data<pb->data) p=(linklist)malloc(sizeof(listnode); p->data=pa->data; q->next=p; q=p; pa=pa->next; e
15、lse p=(linklist)malloc(sizeof(listnode); p->data=pb->data; q->next=p; q=p; pb=pb->next; pa=pa->next; if(pa=NULL&&pb!=NULL) while(pb!=NULL) p=(linklist)malloc(sizeof(listnode); p->data=pb->data; q->next=p; q=p; pb=pb->next; if(pa!=NULL&&pb=NULL) while(pa!=NU
16、LL) p=(linklist)malloc(sizeof(listnode); p->data=pa->data; q->next=p; q=p; pa=pa->next; q->next=NULL; return head;五)單循環(huán)鏈表(2分)(1)建兩個(gè)帶頭結(jié)點(diǎn)的循環(huán)單鏈表LA,LB單循環(huán)鏈表,(2)將兩個(gè)循環(huán)單鏈表合并為一個(gè)循環(huán)單鏈表,其頭指針為L(zhǎng)A。#include<stdio.h>#include<malloc.h>typedef struct Lnode int data; struct Lnode *next; LNode
17、, *LinkList;LinkList CreatList_L(void) LinkList head; LinkList p1,p2; head=p1=p2=(LinkList)malloc(sizeof(LNode); scanf("&d",&p1->data); head->next=p1; while(p1->data!=-1) p2->next=p1; p2=p1; p1=(LinkList)malloc(sizeof(LNode); scanf("%d",&p1->data); p2-&
18、gt;next=head; return head;LinkList MergeList(LinkList LA,LinkList LB)LinkList p,q,m,n;n=LA;p=LA->next;q=m=LB->next;while(p->next!=LA)p=p->next;while(q->next!=LB)q=q->next;q->next=p->next;p->next=m;p=q;return n;void ShowList(LinkList L)printf("鏈表為:n");LinkList p;p
19、=L->next;while(p!=L)printf("%dn",p->data);p=p->next;printf("n");void main()LinkList LA,LB,LC;printf("請(qǐng)輸入循環(huán)鏈表A的元素:");LA=CreatList_L();ShowList(LA);printf("請(qǐng)輸入循環(huán)鏈表B的元素:");LB=CreatList_L();ShowList(LB);LC=MergeList(LA,LB);printf("合并后");ShowList
20、(LC);六)單鏈表應(yīng)用(2分)建立一個(gè)帶頭結(jié)點(diǎn)的線性鏈表,用以存放輸入的二進(jìn)制數(shù),鏈表中每個(gè)結(jié)點(diǎn)的data域存放一個(gè)二進(jìn)制位,并在此鏈表上實(shí)現(xiàn)對(duì)二進(jìn)制數(shù)加1的運(yùn)算。#include <stdio.h>#include <stdlib.h>#include <conio.h>/* 鏈表結(jié)點(diǎn) */typedef struct _Node struct _Node *next; /* 指向下一個(gè)結(jié)點(diǎn) */ unsigned char bit; /* 當(dāng)前結(jié)點(diǎn)所代表的二進(jìn)制位 */ Node;/* 在鏈表的結(jié)尾添加一個(gè)結(jié)點(diǎn) */void addNode(Node
21、*prior, unsigned char bit) Node *node = (Node *)malloc(sizeof(Node); node->next = NULL; node->bit = bit; prior->next = node;void insToHead(Node *head, unsigned char bit) Node *node = (Node *)malloc(sizeof(Node); node->next = head->next; node->bit = bit; head->next = node;Node* c
22、reateList(void) int bit; Node *head = (Node *)malloc(sizeof(Node); head->next = NULL; while (bit = getch() != 26) if (bit = '1' | bit = '0') bit = bit - '0' printf("%d", bit); insToHead(head, bit); printf("n"); return head;/* 低端二進(jìn)制位放在鏈表的前面 */void inc(No
23、de *head) Node *node; unsigned char add; /* 頭結(jié)點(diǎn)并不算在二進(jìn)制數(shù)中,所以它的二進(jìn)制位是無效的 */ /* 如果只有頭結(jié)點(diǎn), 加1則生成一個(gè)結(jié)點(diǎn) */ /* 這就是說生成一個(gè)值為1的二進(jìn)制數(shù)鏈表 */ if (head->next = NULL) addNode(head, 1); return; add = 1; node = head; /* add表示要在當(dāng)前結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn)的二進(jìn)制值上加1 */ while (add) /* 如果當(dāng)前結(jié)點(diǎn)的后續(xù)結(jié)點(diǎn)不存在,則增加一個(gè)結(jié)點(diǎn)在結(jié)尾,且其值為1 */ if (node->next = NULL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 成年人變更名字申請(qǐng)書
- 2025年印花泳裝布行業(yè)深度研究分析報(bào)告
- 2025年氨噻肟酰胺項(xiàng)目可行性研究報(bào)告
- 2025年中國骨質(zhì)疏松類藥物市場(chǎng)供需格局及未來發(fā)展趨勢(shì)報(bào)告
- 2025年度新型城鎮(zhèn)化工程聯(lián)營合同
- 2025年度建筑安全生產(chǎn)資金撥付與責(zé)任落實(shí)協(xié)議
- 2025年度招生考試信息保密服務(wù)協(xié)議
- 2025年度智慧能源合理化建議書樣本
- 保全申請(qǐng)書要幾份
- 2025年度城市綜合體建筑工程施工協(xié)議書2
- 胸腔積液護(hù)理查房-范本模板
- 水土保持方案中沉沙池的布設(shè)技術(shù)
- 安全生產(chǎn)技術(shù)規(guī)范 第25部分:城鎮(zhèn)天然氣經(jīng)營企業(yè)DB50-T 867.25-2021
- 現(xiàn)代企業(yè)管理 (全套完整課件)
- 走進(jìn)本土項(xiàng)目化設(shè)計(jì)-讀《PBL項(xiàng)目化學(xué)習(xí)設(shè)計(jì)》有感
- 《網(wǎng)店運(yùn)營與管理》整本書電子教案全套教學(xué)教案
- 教師信息技術(shù)能力提升培訓(xùn)課件希沃的課件
- 高端公寓住宅項(xiàng)目營銷策劃方案(項(xiàng)目定位 發(fā)展建議)
- 執(zhí)業(yè)獸醫(yī)師聘用協(xié)議(合同)書
- 第1本書出體旅程journeys out of the body精教版2003版
- 2022年肝動(dòng)脈化療栓塞術(shù)(TACE)
評(píng)論
0/150
提交評(píng)論