順序表的建立及基本操作_第1頁
順序表的建立及基本操作_第2頁
順序表的建立及基本操作_第3頁
順序表的建立及基本操作_第4頁
順序表的建立及基本操作_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗二 順序表的建立及基本操作方法實現(xiàn)實驗預(yù)備知識:1熟練運用指針進行程序設(shè)計,掌握結(jié)構(gòu)體指針。2掌握使用結(jié)構(gòu)體指針訪問結(jié)構(gòu)體變量。3掌握指針作為函數(shù)的參數(shù)使用。一、實驗?zāi)康?. 理解和掌握線性表的類型定義方法。2. 掌握順序表中的基本運算,包括順序表的創(chuàng)建、元素的添加、刪除,判空及判滿等基本操作。二、實驗要求(本次實驗要求上交)【題目1】-驗證型以下順序表的基本操作已經(jīng)給出,請進行驗證。源程序見附錄部分測試數(shù)據(jù):10 20請將源程序附錄于此:#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100#de

2、fine Icreament 20typedef int ElemType; /用戶自定義數(shù)據(jù)元素類型typedef struct ElemType *elem; /順序表的基地址 int length; /順序表的當前長度int listsize; /預(yù)設(shè)空間容量SqList; /線性表的順序存儲結(jié)構(gòu)SqList* InitList() /創(chuàng)建空的順序表 SqList* L = (SqList*)malloc(sizeof(SqList);/定義順序表L if(!L) printf("空間劃分失敗,程序退出n"); return NULL; L->elem=(Ele

3、mType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L->elem) printf("空間劃分失敗,程序退出n"); return NULL; L->length=0; L->listsize=LIST_INIT_SIZE; return L;int CreateList(SqList* L) /創(chuàng)建順序表(非空) int number; /順序表中元素的個數(shù) int i; /循環(huán)變量 printf("請輸入插入元素的個數(shù):"); scanf("%d",&n

4、umber); if(number > LIST_INIT_SIZE) /一定要判斷輸入的個數(shù)是否大于順序表的最大長度 printf("輸入個數(shù)大于順序表的長度n"); return 0; for(i=0;i<number;i+) printf("輸入第%d個數(shù): ",i+1); scanf("%d",L->elem+i); /L->elem+i:每次的輸入都保存在順序表元素中的下一個地址,而不是一直放在元素的首地址 /給順序表中每個數(shù)據(jù)元素賦值L->length=number; /當前順序表的長度 re

5、turn 1;void print(SqList* L) /輸出當前順序表 int i; printf("輸出:n"); for(i=0;i<L->length;i+) printf("第%d個數(shù):%-3dn",i+1,*(L->elem + i); /L->elem+i:和輸入是一個道理 printf("順序表長度為:%dn", L->length); printf("n");int main() SqList* L = InitList(); /申請一個指向順序表的指針,并對其初始

6、化 if(!L) /判斷申請是否成功 printf("初始化線性表失敗n"); return 1; if(!CreateList(L) /判斷創(chuàng)建順序表是否成功 printf("創(chuàng)建順序表失敗n"); return 1; print(L); /打印順序表 free(L->elem); /釋放申請的順序表元素的內(nèi)存 free(L); /釋放申請的順序表內(nèi)存 return 0;請將運行結(jié)果圖附錄于此【題目2】(1) 有一個表元素按值遞增排列的順序表,編寫一個函數(shù)實現(xiàn)刪除順序表中多余的值相同元素(2) 有一個順序表,編寫一個在順序表中查找最大和最小值元素

7、的函數(shù),并分析其時間復(fù)雜度算法分析:問題1:輸入元素的個數(shù)問題2:排序的次數(shù)請將源程序附錄于此:#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct ArrListint *arr;int length;List;List *Init(int n) List *L=(List*)malloc(sizeof(List);L->arr=(int *)malloc(sizeof(int)*n);L->length=0;return L;/輸入元素 void input(L

8、ist *L,int n) int i; int x; printf("請輸入%d個數(shù)n",n); for(i=0;i<n;i+) while(!(scanf("%d",&x) printf("輸入錯誤請重新輸入!n"); scanf("%*cn"); scanf("%*c"); L->arri=x; +L->length; /輸出元素 void display(List *L,int n)int i; for(i=0;i<n;i+) printf("第

9、%d一個元素是;%dn",i+1,L->arri); /順序表的清空void clearList(List *L) free(L->arr);L->length=0;free(L);L=NULL;/元素長度 int ListLength(List *L)return L->length;/對元素排序 void swap(List *L)int i;for(i=0;i<L->length;i+)if(L->arri>L->arri+1&&i+1!=L->length)int temp=L->arri;L-

10、>arri=L->arri+1;L->arri+1=temp;/刪除重復(fù)元素 void DelList(List *L) int i=0;int n=0;for(i=0;i<L->length;i+)if(L->arri=L->arri+1)n=i;while(n<L->length)L->arrn=L->arrn+1;n+; -L->length;/輸出最大最小元素 void maxmin(List *L) int min=L->arr0; int max=L->arr0; int i; for(i=1;i&

11、lt;L->length;i+) if(min>L->arri) min=L->arri; if(max<L->arri) max=L->arri; printf("最大元素是;%dn最小元素是;%dn",max,min);int main()int n;printf("請輸入插入元素的個數(shù):");scanf("%d",&n);List *L=Init(n);input(L,n);display(L,n);swap(L);printf("順序表長度是;%dn",L->length); DelList(L); display(L,L->length); printf("順序表長度是;%dn",L->length);maxmin(

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論