線性表實驗代碼_第1頁
線性表實驗代碼_第2頁
線性表實驗代碼_第3頁
線性表實驗代碼_第4頁
線性表實驗代碼_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

#include〈stdio.h〉#include〈stdlib.h〉#include<string.h〉#defineLIST_INIT_SIZE100 //線性表存儲空間的初始分配量#defineLISTINCREMENT10 //線性表存儲空間的分配增量typedefintElemType;typedefenum{FALSE,TURE}Status;/*順序表*/typedefstruct{ElemType*elem;//存儲空間的基址intlength; //當前長度intlistsize;//當前分配的容量}SqList;StatusInitList_Sq(SqList*L) //建表{L-〉elem=(ElemType*)calloc(LIST_INIT_SIZE,sizeof(ElemType));if(!L-〉elem)exit(0); //申請空間失敗L->length=0; //空表長度為0L-〉listsize=LIST_INIT_SIZE;//初始的存儲容量returnTURE;}//InitList_SqStatusListlnsert_Sq(SqList*L,inti,ElemTypee) //插入元素{//在順序線性表L中第i個位置之前插入新的元素e,i的合法值為1〈=i〈=L-〉length.ElemType*newbase,*q,*p;if(i〈l||i〉L-〉length+1)returnFALSE;//i數(shù)值不合法if(L->length〉=L-〉listsize)//判斷存儲空間是否滿了,如果滿了就增加分配{newbase=(ElemType*)realloc(L-〉elem,(L-〉listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(0);L—〉elem=newbase;L-〉listsize+=LISTINCREMENT;}q=&(L-〉elem[iT]);for(p=&(L-〉elem[L-〉lengthT]);p〉=q;--p)*(p+1)=*p;//移動插入位置之后的元素*q=e;++L—〉length;returnTURE;}//ListInsert_SqStatusListDelete_Sq(SqList*L,inti,ElemType*e) //在順序表L中刪除第i個元素,并用e返回其值{ElemType*p,*q;if(i〈l||i〉L-〉length)returnFALSE;//i值不合法q=&(L-〉elem[iT]);e=q;for(p=&(L-〉elem[L-〉lengthT]),q++;q〈=p;q++)*(q-1)=*q;//刪除元素,左移后面的元素一L—〉length;returnTURE;}//ListDelete_SqintLocateElem_Sq(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){//在順序線性表L中查找第1個值為e滿足compare()的元素的位序,若找到,返回在L中的位序,否則返回0inti=1;ElemType*p=L.elem;while(i<=L.length&&!(*compare)(*p++,e))++i;if(i<=L.length)returni;elsereturn0;}//LocateElem_SqStatusnumCompare(ElemTypep,ElemTypeq)//比較函數(shù){if(p==q)returnTURE;elsereturnFALSE;}voidprint_List(SqList*L,void(*printElemType)(ElemType)) //輸出整個表L,用到函數(shù)指針{inti;for(i=0;i〈L-〉length;i++){(*printElemType)(L-〉elem[i]);putchar(,\n,);}}voidprintElem(ElemTypee) //輸出一個元素{printf("%-8d",e);/*線性鏈表——雙向鏈表*/typedefstructLNode{//結(jié)點類型structLNode*prior;ElemTypedata;structLNode*next;}LNode,*Link;typedefstruct{Linkhead,tail;intlength;}LinkList;//鏈表類型//分別指向線性鏈表中的頭結(jié)點和最后一個結(jié)點//指示線性表中數(shù)據(jù)元素的個數(shù)StatusMakeNode(LNode**p,ElemTypee)//動態(tài)申請一個結(jié)點{if((*p=(LNode*)malloc(sizeof(ElemType)))!=NULL){(*p)-〉data=e;returnTURE;}elsereturnFALSE;}StatusInitList_LL(LinkList*LL)//初始化鏈表{LNode*p;ElemTypee=0;if(!MakeNode(&p,e))returnFALSE;//建立頭結(jié)點LL—〉head=LL—〉tail=p;p—〉prior=p—〉next=p;LL-〉length=0;returnTURE;}//InitList_LLLinkLocateElem_LL(LinkListLL,ElemTypee,Status(*compare)(ElemType,ElemType)){//在鏈表LL中查找第1個值為e滿足compare()的元素的結(jié)點,若找到,返回其地址Linkp=LL.head—〉next;while(p!=LL.head&&!(*compare)(e,p-〉data))p=p-〉next;if((*compare)(e,p-〉data)==TURE)returnp;elsereturnNULL;}//LocateElem_LLStatusListlnsert_LL(LinkList*LL,inti,ElemTypee){//在帶頭結(jié)點的鏈表第i個位置插入結(jié)點,存放元素eLinkp,p1;intj;p1=LL—〉head;if(!MakeNode(&p,e))returnFALSE;//申請結(jié)點if(i〉LL-〉length+l||i〈1)returnFALSE;//判斷i的合法性if(i==LL—>length+1) //當插入到表尾的情況{p—〉prior=LL—〉tail;p—〉next=LL—〉head;LL—〉tail—〉next=p;LL—〉tail=p;}else{for(j=0;j〈i;j++)p1=p1-〉next;//插入到其他位置時的情況,先將pl指向第i個有效結(jié)點p—〉prior=p1—〉prior;p—>next=p1;p1—〉prior—〉next=p;p]_〉prior二p;}LL-〉length++;returnTURE;}//Listlnsert_LLStatusListDelete_LL(LinkList*LL,inti,Links){//刪除鏈表中第i個有效結(jié)點intj;Linkp=LL—〉head;if(i〉LL-〉length||i<1)returnFALSE;//判斷i的合法性for(j=0;j<i;j++)p=p—>next;//先將pl指向第i個有效結(jié)點p—〉prior—〉next=p—>next;p—>next—〉prior=p—〉prior;*s二*p;LL—〉length——;returnTURE;}//ListDelete_LLvoidprint_LL(LinkList*LL,void(*printElemType)(ElemType)){inti;LNode*p=LL—〉head—〉next;if(LL-〉length==0)printf("\n表中沒有元素!\n");else{for(i=O,p=LL-〉head-〉next;i〈LL-〉length;i++){(*printElemType)(p-〉data);p=p—〉next;printf("\n");}}}//print_LLvoidzhuJieMian(){v-krc-J4—P(‘‘ *4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4*\v?''IirIlliIl ”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心\I"***************** ^線 丿性 ^表 *****************\n""**** ****\n"********\n""****———1——順序表****\n"********\n""**** 2 鏈表 ****\n""**** ****\n"****———0———— 退出 - ****\n"********\n"〃 777777"********\n************** 請輸入各個功能對應得數(shù)字*****************\n"" \n");}voidshunXuBiao(){v>rc-J 4—P(〃?X?*4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4*\v?''IirIlliIl ”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心\I"vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*>T>>T>"**** TOC\o"1-5"\h\z"**** 1 插"**** 2 冊0"**** 3 查"****——— 4 ——輸"****———— 5 ——表vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*\!<■?〃\II ****\n"入 ****\n"除 ****\n"詢 ****\n"出 ****\n"長 ****\n""**** 0 退出 ****\n""**** ****\n"************** 請輸入各個功能對應得數(shù)字 *****************\n"" \n");}voidlianBiao(){v-krc-J4—P(‘‘ *4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4**4*\v?''IirIlliIl ”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心”心\I"vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*鏈表vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*\ 〃\I1"**** ****\n"**** 1--- 插入——****\n"**** 2--—— 刪除---****\n"**** 3 --—— 查詢****\n"**** 4--- 輸出---****\n"**** 5 --- 表長---****\n"**** 0--—— 退出---****\n〃 C"****7****\n"vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*請輸入各個功能對應得數(shù)字vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*vt*\ 〃\I1〃 \n");voidmain(){SqListL;LinkListLL;intchoice;inti;InitList_LL(&&LL);InitList_Sq(&L);for(i=1;i〈=10;i++){ListInsert_LL(&LL,i,i);ListInsert_Sq(&L,i,i*10);}do{zhuJieMian();printf("請輸入:");scanf("%d",&choice);switch(choice){case1:intchoice;system("els");do{shunXuBiao();printf("請輸入:");scanf("%d",&choice);switch(choice){case1:{inti;ElemTypee;printf("\n進行插入操作!\n");printf(〃請輸入要插入元素的值:〃);scanf("%d",&e);printf(〃請輸入要將該元素插入的位置:〃);scanf("%d",&i);if(ListInsert_Sq(&L,i,e))printf("插入成功!\n");elseprintf("插入失?。n");system("PAUSE");}break;case2:{inti;ElemTypee;printf("\n進行刪除操作!\n");printf(〃請輸入將要刪除元素的的位置:〃);scanf("%d",&i);if(ListDelete_Sq(&L,i,&e))printf("刪除成功!\n");elseprintf("刪除失敗!\n");system("PAUSE");}break;case3:{intlocation;ElemTypee;printf("\n進行查找工作!\n");printf("請輸入要查找的值:");scanf("%d",&e);if(location=LocateElem_Sq(L,e,numCompare))printf("該值在表中第%d的位置!\n",location);elseprintf("該表中沒有該值!\n");system("PAUSE");}break;case4:{printf(〃表里元素如下:\n");print_List(&L,printElem);system("PAUSE");}break;case5:{printf("\n順序表表長為**%d**!\n",L.length);system("PAUSE");}break;case0:break;default:printf("輸入有誤,請重新輸入!\n");system("PAUSE");break;}system("els");}while(choice);}break;case2:{intchoice;system("els");do{lianBiao();printf("請輸入:");scanf("%d",&choice);switch(choice){case1:{inti;ElemTypee;printf("\n進行插入操作!\n");printf("請輸入要插入元素的值:");scanf("%d",&e);printf(〃請輸入要將該元素插入的位置:〃);scanf("%d",&i);if(ListInsert_LL(&LL,i,e))printf("插入成功!\n");elseprintf("插入失??!

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論