實驗一線性表的抽象數據類型的實現_第1頁
實驗一線性表的抽象數據類型的實現_第2頁
實驗一線性表的抽象數據類型的實現_第3頁
實驗一線性表的抽象數據類型的實現_第4頁
實驗一線性表的抽象數據類型的實現_第5頁
已閱讀5頁,還剩1頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

數據結構實驗課程設計題目:實驗一線性表的抽象數據類型的實現姓名:楊靜學號:2023114105班級:2班〔44號〕組長:指導老師:解德祥計算機與信息學院實驗一線性表的抽象數據類型的實現實驗目的掌握線性表的順序存儲結構和鏈式存儲結構;熟練掌握順序表和鏈表根本算法的實現;掌握利用線性表數據結構解決實際問題的方法和根本技巧;按照實驗題目要求獨立正確地完成實驗內容〔編寫、調試算法程序,提交程序清單及及相關實驗數據與運行結果〕;按時提交實驗報告。實驗環境:計算機、C語言程序設計環境實驗學時:2學時,選做實驗。實驗內容一、順序表的根本操作實現實驗要求:數據元素類型ElemType取整型int。按照順序存儲結構實現如下算法〔各算法邊界條件和返回結果適當給出〕:創立任意整數線性表〔即線性表的元素值隨機在鍵盤上輸入〕,長度限定在20之內;打印〔遍歷〕該線性表〔依次打印出表中元素值〕;在線性表中查找第i個元素,并返回其值;在線性表中第i個元素之前插入一元素;在線性表中刪除第i個元素;求線性表中所有元素值〔整數〕之和;二、鏈表〔帶頭結點〕根本操作實驗要求:數據元素類型ElemType取字符型char。按照動態單循環鏈表結構實現如下算法〔各算法邊界條件適當給出〕:創立任意字符型有序〔遞增排序〕單循環鏈表〔即鏈表的字符元素隨機在鍵盤上輸入〕,長度限定在15之內;打印〔遍歷〕該鏈表〔依次打印出表中元素值〕;在鏈表中查找第i個元素,i合法返回元素值,否那么,返回FALSE;在鏈表中查找與一字符相同的第一個結點,有那么返回TRUE,否那么,返回FALSE;在鏈表中按照有序方式插入一字符元素;在線性表中刪除第i個結點;計算鏈表的長度。實驗步驟:C源程序代碼如下:#include<stdio.h>#defineOK1#defineERROR0#defineMAXSIZE20typedefintElemType;typedefstruct{ElemTypeelem[MAXSIZE];intlast;}SeqList;voidCreateSeqList(SeqList*L){intx,i=0; printf("請輸入正整數,不超過20個:\n");scanf("%d",&x); while(i<MAXSIZE) {L->elem[i]=x;scanf("%d",&x);i++; }L->last=i;}voidPrintList(SeqList*L){inti;printf("數據元素為:\n");for(i=0;i<L->last;i++)printf("%d\n",L->elem[i]);}intLocate(SeqList*L,inti){if(i>=1&&i<=L->last)returnL->elem[i-1]; elsereturn0;}intInsList(SeqList*L,inti,ElemTypee){ intk; if((i<1)||(i>L->last+2)) {printf("插入i位置值不合法");return(ERROR);} if(L->last>=MAXSIZE-1) { printf("表已滿,無法插入");return(ERROR);} for(k=L->last;k>=i-1;k++) L->elem[k+1]=L->elem[k]; L->elem[i-1]=e;L->last++;return(OK);}intDelList(SeqList*L,inti,ElemType*e){intk;if((i<1)||(i>L->last+1)){ printf("刪除位置不合法");return(ERROR); }*e=L->elem[i-1];for(k=i;i<=L->last;k++) L->elem[k-1]=L->elem[k];L->last--;return(OK);}intSumList(SeqList*L){ inti,sum=0; for(i=0;i<=L->last;i++) sum=sum+L->elem[i]; return(sum);}voidjiemian(){SeqListL;intj,i,a; printf("創立新鏈表請按1\n打印鏈表請按2\n按序號查找元素請按3\n在鏈表中查找與一字符相同的第一個結點請按4\n在鏈表中按照有序方式插入一字符元素請按5\n在線性表中刪除第i個結點請按6\n計算鏈表的長度請按7\n操作結束請按0\n");scanf("%d",&j);while(j){ switch(j) { case1:CreateSeqList(&L);break; case2:printf("打印順序表如下:\n"); PrintList(&L);break; case3:printf("請問你要查找第幾個元素:\n"); scanf("%d",&i); if(Locate(&L,i)) printf("您要找的元素為%d\n",Locate(&L,i)); elseprintf("i值不合法!");break; case4:printf("請您輸入選擇插入位置以及輸入插入元素:\n"); scanf("%d%d",&i,&a); if(InsList(&L,i,a))PrintList(&L);elseprintf("i值不合法!\n");break; case5: printf("請您輸入要刪除元素的位置:\n"); scanf("%d",&i); if(DelList(&L,i,&a))PrintList(&L);elseprintf("i值不合法!\n");break; case6:printf("所有元素之和為:%d\n",SumList(&L));break;case7:break;default:printf("數據輸入錯誤,請重新輸入!");} printf("操作結束請按7;繼續操作請按1-6,請輸入您的選擇:\n"); scanf("%d",&j);}}voidmain(){jiemian();}鏈表〔帶頭結點〕根本操作實驗:#include"stdlib.h"#include"stdio.h"structLNode{charelem;structLNode*next;}*l,*p,*q;voidOrder(structLNode*l,intn){inti;charswap,*e,*f;for(i=1;i<=n-1;i++){p=l->next;while(p->next!=l){if(p->elem>p->next->elem){e=&p->elem;f=&p->next->elem;swap=*e;*e=*f;*f=swap;}p=p->next;}}return;}voidPrint(structLNode*l,intn){inti;p=l->next;for(i=1;i<=n;i++){printf("%c\n",p->elem);p=p->next;}printf("\n");return;}voidLocate(structLNode*l,intn,intm){inti;if(m>n){printf("FALSE!\t");return;}else{p=l;for(i=1;i<=m;i++){p=p->next;}printf("Theelemis:%c\n",p->elem);}return;}voidInsertelem(structLNode*l,intn,charm){q=(structLNode*)malloc(sizeof(structLNode));q->next=l->next;l->next=q;q->elem=m;n=n+1;Order(l,n);Print(l,n);return;}voidDelete(structLNode*l,intn,intm){inti;p=l;for(i=1;i<m;i++){p=p->next;}p->next=p->next->next;n=n-1;printf("刪除后的鏈表為:\n");Print(l,n);return;}voidLength(intn){inti;intlength=0;for(i=1;i<=n+1;i++){length=length+sizeof(structLNode);}printf("--------------------------------------------------------------\n");printf("Thelengthofthelistis:%d\n",length);return;}main(){printf("--------------歡送進入數據結構實驗設計--------------\n"); inti,a,k,n;charc,s;l=(structLNode*)malloc(sizeof(structLNode));l->next=NULL;printf("請輸入鏈表的元素數:");scanf("%d",&n);getchar();if(n<=15){for(i=n;i>0;i--){q=(structLNode*)malloc(sizeof(structLNode));q->next=l->next;l->next=q;}p=l;while(p->next!=NULL)p=p->next;p->next=l; printf("輸入元素:");p=l->next;for(i=1;i<=n;i++){scanf("%c",&p->elem);getchar();p=p->next;}Order(l,n);printf("--------------------------------------------------------------\n"); printf("您輸入的元素為:\n");Print(l,n);printf("--------------------------------------------------------------\n");printf("輸入您想查找的元素序號:");scanf("%d",&a);getchar();Locate(l,n,a);printf("--------------------------------------------------------------\n");printf("輸入您想插入的元素:");scanf("%c",&s);ge

溫馨提示

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

評論

0/150

提交評論