線性表—順序儲存實現

來源:互聯網
上載者:User

/***************************************************************************<br />*功 能* 實現線性表的基本操作<br />*描 述* 實現線性表的順序儲存,及其插入、刪除、查詢等操作<br />*時 間* 2010-11-14<br />***************************************************************************/<br />#include<stdio.h><br />#include<malloc.h><br />#include<windows.h><br />#include<stdlib.h><br />#define false 0<br />#define true 1<br />#define INITIAL_SIZE 100 //初始化數組的大小<br />#define INC_SIZE 10 //每次擴充的數組大小<br />typedef int ElemType; //元素的類型<br />typedef struct{ // SequentialList{<br />ElemType* ElemArray;<br />int Used_length; //數組已用大小<br />int Max_Length; //數組大小<br />}SqList;<br />//-----------------------------------------表屬性操作---------------------------------------<br />/*初始化線性表*/<br />int InitSqList(SqList* sqlist){<br />sqlist->ElemArray = (ElemType*)malloc(sizeof(ElemType)*INITIAL_SIZE);<br />if(sqlist->ElemArray == NULL){<br />return false;<br />}<br />sqlist->Used_length = 0;<br />sqlist->Max_Length = INITIAL_SIZE;<br />return true;<br />}<br />/*置為空白表*/<br />void CleanSqList(SqList* sqlist){<br />sqlist->Used_length = 0;<br />}<br />/*銷毀表*/<br />void DestroySqList(SqList* sqlist){<br />free(sqlist->ElemArray);<br />sqlist = NULL;<br />}<br />/*返回線性表的長度*/<br />int GetLength(SqList* sqlist){<br />return sqlist->Used_length;<br />}<br />/*判斷線性表是否為空白*/<br />int IsEmpty(SqList* sqlist){<br />return (sqlist->Used_length==0)? true:false;<br />}<br />//-----------------------------------------表擴充操作---------------------------------------<br />/*檢查並確定是否需增加線性表大小*/<br />int IncSqListSize(SqList* sqlist){<br />int i;<br />ElemType* temp = NULL;<br />if(sqlist->Used_length == sqlist->Max_Length){<br />temp = (ElemType*)malloc(sizeof(ElemType)*(sqlist->Max_Length+INC_SIZE));<br />if(temp == NULL){<br />return false;<br />}<br />for(i=0;i<sqlist->Max_Length;i++){<br />temp[i] = sqlist->ElemArray[i];<br />}<br />free(sqlist->ElemArray);<br />sqlist->ElemArray = temp;<br />sqlist->Max_Length += INC_SIZE;<br />}<br />return true;<br />}<br />//-----------------------------------------取值操作---------------------------------------<br />ElemType GetElem(SqList* sqlist,int index){<br />if(index < sqlist->Used_length && index >= 0){<br />return sqlist->ElemArray[index];<br />}<br />printf("Error Index! Please Check!");<br />return -1;<br />}<br />//-----------------------------------------插入操作---------------------------------------<br />/*線性表的頭插*/<br />int InsertHead(SqList* sqlist,ElemType elem){<br />int i;<br />if(IncSqListSize(sqlist)){<br />for(i=sqlist->Used_length;i>0;i--){ //數組元素後移 騰出 0 位置<br />sqlist->ElemArray[i] = sqlist->ElemArray[i-1];<br />}<br />sqlist->ElemArray[0] = elem;<br />sqlist->Used_length++;<br />return true;<br />}<br />return false;<br />}<br />/*線性表的尾插*/<br />int InsertTail(SqList* sqlist,ElemType elem){<br />if(IncSqListSize(sqlist)){<br />sqlist->ElemArray[sqlist->Used_length] = elem;<br />sqlist->Used_length++;<br />return true;<br />}<br />return false;<br />}<br />/*線上性表的index位置插入資料*/<br />int Insert(SqList* sqlist,ElemType elem,int index){<br />int i = index;<br />if(IncSqListSize(sqlist)){<br />for(i=sqlist->Used_length;i>index;i--){ //數組元素後移 騰出 index 位置<br />sqlist->ElemArray[i] = sqlist->ElemArray[i-1];<br />}<br />sqlist->ElemArray[index] = elem;<br />sqlist->Used_length++;<br />return true;<br />}<br />return false;<br />}<br />//-----------------------------------------刪除操作---------------------------------------<br />/*刪除頭結點,並賦值給pElem*/<br />int DelHead(SqList* sqlist,ElemType* pElem){<br />int i;<br />if(!IsEmpty(sqlist)){<br />*pElem = sqlist->ElemArray[0];<br />for(i=0;i<(sqlist->Used_length)-1;i++){<br />sqlist->ElemArray[i] = sqlist->ElemArray[i+1];<br />}<br />sqlist->Used_length--;<br />return true;<br />}<br />return false;<br />}</p><p>/*刪除尾結點,並賦值給pElem*/<br />int DelTail(SqList* sqlist,ElemType* pElem){<br />if(!IsEmpty(sqlist)){<br />*pElem = sqlist->ElemArray[sqlist->Used_length-1];<br />sqlist->Used_length--;<br />return true;<br />}<br />return false;<br />}<br />/*刪除結點index,並賦值給pElem*/<br />int Delele(SqList* sqlist,ElemType* pElem,int index){<br />int i;<br />if(!IsEmpty(sqlist)){<br />*pElem = sqlist->ElemArray[index];<br />for(i=index;i<(sqlist->Used_length)-1;i++){<br />sqlist->ElemArray[i] = sqlist->ElemArray[i+1];<br />}<br /> sqlist->Used_length--;<br />return true;<br />}<br />return false;<br />}<br />//-----------------------------------------順序表串連操作---------------------------------------<br />/*將sqlist2串連在sqlist1的尾部*/<br />void AttachSqList(SqList* sqlist1,SqList* sqlist2){<br />int i;<br />if(!IsEmpty(sqlist2)){<br />for(i=0;i<sqlist2->Used_length;i++){<br />InsertTail(sqlist1,sqlist2->ElemArray[i]);<br />}<br />}<br />}<br />//-----------------------------------------顯示操作---------------------------------------<br />/*顯示元素(當元素類型變化時,需要重寫該函數)*/<br />void DisplayElem(ElemType elem){<br />printf("%d",elem);<br />}<br />/*顯示表*/<br />int DisplaySqlist(SqList* sqlist){<br />int i;<br />if(!IsEmpty(sqlist)){<br />for(i=0;i<sqlist->Used_length;i++){<br />DisplayElem(sqlist->ElemArray[i]);<br />printf(" ");<br />}<br />printf("/n");<br />return true;<br />}<br />return false;<br />}<br />//-----------------------------------------主函數 測試用---------------------------------------<br />void main(){<br />int i;<br />char choice;<br />ElemType elem;<br />SqList sqlist,sqlist2;<br />InitSqList(&sqlist); //初始化<br />InitSqList(&sqlist2);<br />for(i=0;i<10;i++){ //尾插十個資料<br />InsertTail(&sqlist,i);<br />}<br />DisplaySqlist(&sqlist); //顯示<br />for(i=0;i<10;i++){<br />InsertHead(&sqlist,i); //頭插九個資料<br />}<br />DisplaySqlist(&sqlist); //顯示<br />Insert(&sqlist,1,10); //在10位置插入資料<br /> DisplaySqlist(&sqlist); //顯示<br />printf(" ");<br />DelHead(&sqlist,&elem); //頭刪<br />DisplaySqlist(&sqlist); //顯示<br />printf(" ");<br />DelTail(&sqlist,&elem); //尾刪<br />DisplaySqlist(&sqlist); //顯示<br />printf(" ");<br />Delele(&sqlist,&elem,9); //尾刪<br />DisplaySqlist(&sqlist); //顯示<br />CleanSqList(&sqlist); //清空</p><p>printf("Clean the Screen, Y/N? ..."); //清屏<br /> scanf("%c",&choice);<br />if(choice == 'Y'){<br />system("cls");<br />}<br />for(i=0;i<8;i++){<br />InsertTail(&sqlist,i);<br />InsertHead(&sqlist2,i);<br />}<br />AttachSqList(&sqlist,&sqlist2);<br />DisplaySqlist(&sqlist);<br />} 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.