線性表作用的實現_第1頁
線性表作用的實現_第2頁
線性表作用的實現_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基本目的 用表 la 實現線性表的建立,清空,插入,刪除,按值查 址,按址查值,并實現兩非降序表 la ,lb 合并成一個非 降序表 lcLa ,lb 輸入數字時輸入小于 0 的數回車結束,并且該數不在該線性 表之內基本設想 編寫各個功能實現函數,包括線性表的建立,清空,插 入,刪除,按值查址,按址查值,并實現合并,在主函 數中用 la 來調用各個函數, lb 只參與與 la 合并的操作, 合并后的表為 lc ,其中 la, lb, lc 都是非降序的插入函數 要輸入要插入的地址和值,執(zhí)行前判斷地址的合法性, 移位時,從最后一位往后移,避免覆蓋刪除函數 判斷地址的合法性,刪除某一數值后將其后的

2、數值依次 往前移位按值查址 存在則返回地址,否則返回 error按址查值 判斷地址是否存在,是則執(zhí)行,否則返回 error 合并函數 判斷兩表是否為空,將兩表中第一位數字比較,將較小 值寫入 lc 中,較大值與另一表中的第二位比較以此類推 直至其中一表循環(huán)結束將另一表剩余元素寫入 lc 即可, 若兩表循環(huán)同時結束,則退出循環(huán)#in clude<stdio.h>#in clude<iostream> #defi ne MaxSize 100#defi ne OK 1 #defi ne ERROR -1 using n amespace std; typedef int D

3、ataType;定義一個賦值函數void CopyData(DataType *a, DataType b)*a = b; typedef int Status; typedef int Bool;/定義一個比較函數Bool Equal(DataType a, DataType b) return a=b;/定義一個結構體申請空間 typedef struct SQListDataType SpaceMaxSize; / 表的長度為 MaxSize int Length;SQList;/構造一個空的線性表Status InitList(SQList *L)L->Length = 0;re

4、turn OK;/清空線性表Status ClearList(SQList *L)L->Length = 0;return 0;/判斷線性表是否為空Bool IsEmpty(SQList L)return L.Length = 0;/求線性表長度 int GetLength(SQList L)return L.Length;/插入函數Status InsList(SQList *L, int index, DataType e)int j;if(index<0 | index>L->Length)/ 判斷輸入的地址是否存在return ERROR;if(L->Le

5、ngth >= MaxSize)/ 判斷插入后,空間是否足夠return ERROR;for(j=L->Length-1; j>=index; j-)/ 從最后一位開始依次移位,直到 要插入的地址處結束L->Spacej+1 = L->Spacej;CopyData(L->Space + in dex, e);/插入數值L->Length+;return OK;/刪除函數Status DelList(SQList *L, int index, DataType *e)int j;if(index<0 | index>=L->Lengt

6、h)/ 判斷輸入的地址是否存在 return ERROR;CopyData(e, L->Spaceindex); for(j=index; j<L->Length-1; j+)/ 移位L->Spacej = L->Spacej+1;L->Length-;return OK;/ 按值查址int Locate(SQList L, DataType e)int i;for(i=0; i<L.Length; i+) if(Equal(L.Spacei, e) return i;return ERROR;/按址查值 DataType GetData(SQList

7、 L, int index)if(index<0 | index>=L.Length) return ERROR;return L.Spaceindex;/將 la, lb 中的數值按非降序合并Status MergeList(SQList la, SQList lb, SQList *lc)int i=0,j=0,k=0;while(i<GetLength(la) && j<GetLength(lb)/ 判斷 la,lb 均為非空 if(GetData(la,i) < GetData(lb,j)InsList(lc,k,GetData(la,i)

8、;i+;k+;elseInsList(lc,k,GetData(lb,j);j+;k+;while(i<GetLength(la)InsList(lc,k,GetData(la,i);i+;k+;while(j<GetLength(lb)InsList(lc,k,GetData(lb,j);j+;k+;return k;SQList la,lb,lc;/ 建立三個表 la,lb,lc 全局變量/主函數int main()DataType *e1;int i,e;int num;int index=0;ladength=O;清空 laIb.Length=O;清空 lbprintf(&

9、quot;please input la:n");while(1)scanf("%d",&la.Spaceindex);/ 輸入表 laif(la.Spaceindex<0)用小于1的值回車結束la輸入 break;index+;la.Length+;index=0;printf("please input lb:n");/輸入表 lbwhile(lb.Spaceindex>=0)/scanf("%d",&lb.Spaceindex);if(lb.Spaceindex<0)用小于1的值回車結

10、束lb輸入 break;index+;lb.Length+;printf("the length of la is %dn",GetLength(la);/ 表 la 的長度printf("(insert in la) please input index and num:n");/ 輸入要插入的 地址和要插入的數字scanf("%d %d",&index,&e);printf("n");InsList(&la,index,e);/ 調用插入函數for(i=0;i<la.Length;

11、i+)printf("%d ",la.Spacei);/ 輸出插入后的 laprintf("n");printf("(delete in la)please input index:n");/ 輸入要刪除的地址 scanf("%d",&index);DelList(&la,index,e1);for(i=0;i<la.Length;i+)printf("%d ",la.Spacei);/ 輸出刪除操作后的 laprintf("n");printf("(seek in la)please input index:n");/ 輸入要查找的地址scanf("%d",&index);num=GetData(la,index);printf("the num is %dn",num);/ 輸入要查找的數值 printf("(seek in la)please input num:n");0 二。edsop%=)七 u

溫馨提示

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

評論

0/150

提交評論