




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)實驗報告1、學(xué)校:安徽大學(xué)2、實驗名稱:線性表的基本操作的實現(xiàn)3、姓名:王勇4、學(xué)號:E010143675、專業(yè):10級網(wǎng)絡(luò)工程6、實驗完成時間:2012年4月5日一實驗?zāi)康模?1熟練掌握線性表的基本操作在順序存儲和鏈?zhǔn)酱鎯ι系膶崿F(xiàn)。 2以線性表的各種操作(建立、插入、刪除、遍歷等)的實現(xiàn)為重點。 3通過本章實驗加深對c語言的使用(特別是函數(shù)的參數(shù)調(diào)用、指針類型的應(yīng)用和鏈表的建立等各種基本操作)。二、實驗內(nèi)容:1.順序表的基本操作的實現(xiàn).包括:(1) 順序表的類型定義;(2) 創(chuàng)建一個元素為1,10,9,5的順序表;(3) 向(2)中表的指定位置插入一個元素;(4) 刪除(3)中順序表
2、中指定位置的元素;(5) 依次輸出(2)(4)順序表中的元素;2.鏈表的基本操作的實現(xiàn).包括:(1) 鏈表的類型定義;(2) 創(chuàng)建一個元素為5,-4,9,10,3的鏈表;(3) 向(2)表中指定位置插入一個元素;(4) 刪除(3)表中指定位置的元素;(5) 依次輸出(2)(4)表中的元;三、實驗步驟:1、本實驗用到的數(shù)據(jù)結(jié)構(gòu)(1)邏輯結(jié)構(gòu):線性結(jié)構(gòu)(2)存儲結(jié)構(gòu):順序存儲結(jié)構(gòu)(順序表)和非順序存儲結(jié)構(gòu)(單鏈表)2、各程序的功能和算法設(shè)計思想程序一:#include#include#include#define LIST_INIT_SIZE 50#define LISTINCREMENT 5#d
3、efine OK 1#define ERROR 0#define OVERFLOW -2typedef char ElemType;typedef int Status; typedef struct ElemType *elem; int length; int listsize;SqList;void InitListSq(SqList *L) / 算法.3 / 構(gòu)造一個空的線性表L。 (*L).elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if (!(*L).elem) exit(OVERFLOW); / 存儲分配失
4、敗 (*L).length = 0; / 空表長度為 (*L).listsize = LIST_INIT_SIZE; / 初始存儲容量 /return L; / InitList_SqStatus ListInsertSq(SqList *L, int i, ElemType e) / 在順序線性表L的第i個元素之前插入新的元素e, / i的合法值為iListLength_Sq(L)+1 ElemType *p; if (i (*L).length+1) return ERROR; / i值不合法 if (*L).length = (*L).listsize) / 當(dāng)前存儲空間已滿,增加容量
5、ElemType *newbase = (ElemType *)realloc(*L).elem, (*L).listsize+LISTINCREMENT)*sizeof (ElemType); if (!newbase) return ERROR; / 存儲分配失敗 (*L).elem = newbase; / 新基址 (*L).listsize += LISTINCREMENT; / 增加存儲容量 ElemType *q = (*L).elem+i-1; / q為插入位置 for (p = (*L).elem+(*L).length-1; p=q; -p) *(p+1) = *p / 插入
6、位置及之后的元素右移 *q = e; / 插入e +(*L).length; / 表長增 return OK; / ListInsert_SqStatus ListDeleteSq(SqList *L, int i, ElemType &e) / 在順序線性表L中刪除第i個元素,并用e返回其值。 / i的合法值為iListLength_Sq(L)。 ElemType *p, *q; if (i(*L).length) return ERROR; / i值不合法 p = (*L).elem+i-1; / p為被刪除元素的位置 e = *p; / 被刪除元素的值賦給e q = (*L).elem+
7、(*L).length-1; / 表尾元素的位置 for (+p; p=q; +p) *(p-1) = *p; / 被刪除元素之后的元素左移 -(*L).length; / 表長減 return OK; / ListDelete_Sqvoid main() int i,n,m; ElemType e; SqList L;InitListSq(&L);/建立空表;printf(請輸入順序表元素個數(shù):n);scanf(%d,&m);if(m=0)do printf(ERROR 請重新輸入:n); scanf(%d,&m);while(m=0);printf(請輸入順序表元素:n);for(i=1;
8、i=m;i+) scanf(%d,&e);ListInsertSq(&L,i,e);printf(輸出初始順序表:n); for(i=1;i=m;i+) printf(%d ,L.elemi-1); printf(n);printf(請輸入插入位置:n);scanf(%d,&n);printf(請輸入插入的元素值:n);scanf(%d,&e); ListInsertSq(&L, n, e);/插入指定元素; printf(輸出插入后的順序表:n);for(i=1;i=L.length;i+)printf(%d ,L.elemi-1);printf(n); printf(請輸入刪除的位置:n)
9、;scanf(%d,&n); ListDeleteSq(&L, n, e);/刪除指定元素; printf(輸出刪除后的順序表:n); for(i=1;i=L.length;i+)printf(%d ,L.elemi-1); printf( e=%dn,e); 功 能:創(chuàng)建一個順序表L,初始化該順序表:輸入順序表元素個數(shù),輸入順序表的元素的值;在順序表的指定位置插入一個元素;在順序表的指定位置刪除一個元素,并用e返回該元素的值;輸出各操作后的順序表。算法設(shè)計思想:首先寫好頭文件,接著是線性表的結(jié)構(gòu)定義,定義成順序表結(jié)構(gòu),在主函數(shù)之前定義了空表建立函數(shù)(InitListSq(SqList *L)
10、),插入函數(shù)(ListInsertSq(SqList *L, int i, ElemType e)),刪除函數(shù)(ListDeleteSq(SqList *L, int i, ElemType &e)),這樣在主函數(shù)中就無需聲明了,就可以直接在主函數(shù)中調(diào)用上面的函數(shù)。程序二:#include#include#include#define OK 1#define ERROR 0typedef char ElemType;typedef int Status; typedef struct lnodeElemType data;struct lnode *next;lnode,*linklist;v
11、oid createlist(linklist &L,int n)/逆位序輸入n個元素的值,建立帶頭結(jié)點的單鏈線性表L。int i;linklist p;L=(linklist) malloc (sizeof(lnode);L-next=NULL;for(i=n;i0;-i)p=(linklist ) malloc (sizeof(lnode);scanf(%d,&p-data);p-next=L-next;L-next=p;/創(chuàng)建帶頭結(jié)點的單鏈表LStatus linklistinsert(linklist &L,int i,ElemType e)/在帶頭結(jié)點的單鏈表L中第i個位置之前插入元
12、素elinklist p,s;p=L;int j=0;while(p&jnext;+j;if(!p|ji-1) return ERROR;s=(linklist) malloc (sizeof(lnode);s-data=e;s-next=p-next;p-next=s;return OK;Status listdelete(linklist &L,int i,ElemType &e)/在帶頭結(jié)點的單鏈表L中,刪除第i個元素,并由e返回其值linklist p,q;p=L;int j=0;while(p-next&jnext;+j;if(!(p-next)|ji-1) return ERROR
13、; q=p-next;e=q-data;p-next=q-next;free(q);return OK;/刪除單鏈表中指定位置的元素void main()linklist L;linklist p;int i,j;ElemType e;printf(請逆序輸入單鏈表元素個數(shù)和元素:n);scanf(%d,&j); createlist(L,j);printf(輸出初始單鏈表L:n);p=L-next;while(p) printf(%d ,p-data);p=p-next;printf(n);printf(請輸入插入的位置:n);scanf(%d,&i);printf(請輸入插入的元素的值:n
14、);scanf(%d,&e); linklistinsert(L,i,e);printf(輸出插入后的單鏈表L:n); p=L-next;while(p) printf(%d ,p-data);p=p-next;printf(n);printf(請輸入刪除的元素位置:n);scanf(%d,&i); listdelete(L, i, e);printf(輸出刪除后的單鏈表L和被刪除元素的值e:n); p=L-next;while(p) printf(%d ,p-data);p=p-next;printf( e=%dn,e);功 能:創(chuàng)建一個單鏈表L,初始化該單鏈表:輸入單鏈表元素個數(shù),輸入單鏈
15、表的元素的值;在單鏈表的指定位置插入一個元素;在單鏈表的指定位置刪除一個元素,并用e返回該元素的值;輸出各操作后的單鏈表。算法設(shè)計思想:首先寫好頭文件,接著是線性表的結(jié)構(gòu)定義,定義成單鏈表結(jié)構(gòu),在主函數(shù)之前定義了空表建立函數(shù)(createlist(linklist &L,int n)),插入函數(shù)(linklistinsert(linklist &L,int i,ElemType e)),刪除函數(shù)(listdelete(linklist &L,int i,ElemType &e)),這樣在主函數(shù)中就無需聲明了,就可以直接在主函數(shù)中調(diào)用上面的函數(shù)。輸入/輸出要求(1)輸入數(shù)據(jù):元素個數(shù):自定義(本
16、次實驗以4為例);輸入的元素的值:自定義(本次實驗以1,10,9,5為例);插入元素的位置:自定義(本次實驗以2為例);插入元素的值:自定義(本次實驗以7為例);刪除元素的位置:自定義(本次實驗以4為例)。 數(shù)據(jù)類型:整型(int 型)。 值域范圍:元素個數(shù):m0;輸入元素的值:32768,32767;插入元素的位置:i0;刪除元素的位置:i0。(2)輸出數(shù)據(jù):元素個數(shù):自定義(本次實驗以5為例);輸入的元素的值:自定義(本次實驗以5,-4,9,10,3為例);插入元素的位置:自定義(本次實驗以4為例);插入元素的值:自定義(本次實驗以21為例);刪除元素的位置:自定義(本次實驗以3為例)。 數(shù)據(jù)類型:整型(int 型)。 值域范圍:元素個數(shù):m0;輸入元素的值:32768,32767;插入元素的位置:i0;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新型養(yǎng)老服務(wù)機(jī)構(gòu)代繳社保服務(wù)協(xié)議范本
- 2025年新能源發(fā)電設(shè)備定期檢查與維護(hù)合同
- 2025年度智能車庫租賃及車位租賃與停車資源共享協(xié)議
- 2025年度土地承包經(jīng)營權(quán)流轉(zhuǎn)糾紛調(diào)解合同模板
- 2025年茶葉種植基地生態(tài)保護(hù)與修復(fù)承包協(xié)議
- 2025年度離婚協(xié)議書格式規(guī)范與編制要求
- 秘書工作計劃對企業(yè)目標(biāo)的支持
- 班級跨學(xué)科活動的實施路徑計劃
- 社團(tuán)活動資源共享方案計劃
- 醫(yī)院文化建設(shè)增效方案計劃
- 急性呼衰院前急救流程
- 2024-2025學(xué)年第二學(xué)期學(xué)校總務(wù)工作計劃(附2月-6月安排表行事歷)
- 山東省濟(jì)南市槐蔭區(qū)2024-2025學(xué)年八年級上學(xué)期期末語文試題(含答案)
- 2025年廣西柳州市中級人民法院招錄聘用工作人員17人高頻重點提升(共500題)附帶答案詳解
- 2024年全國職業(yè)院校技能大賽高職組(研學(xué)旅行賽項)考試題庫(含答案)
- 十八項核心制度
- 工程施工安全培訓(xùn)教育
- 2024年08月浙江2024渤海銀行杭州分行秋季校園招考筆試歷年參考題庫附帶答案詳解
- 2025年北師大版數(shù)學(xué)六年級下冊教學(xué)計劃(含進(jìn)度表)
- 2025年潔凈室工程師培訓(xùn):從理論到實踐的全面提升
- 2025年臨床醫(yī)師定期考核必考復(fù)習(xí)題庫及答案(620題)
評論
0/150
提交評論