動態順序表的功能實現

2021-07-12 07:09:57 字數 3931 閱讀 1317

在了解線性結構後我們知道它可分為順序表和煉表兩種,而順序表又分為靜態順序表

和動態順序表.

靜態順序表和靜態通訊錄的實現極為相似,但是我們知道靜態版本有著明顯的缺陷,空間分配太大易造成浪費,太小又不便儲存,而動態版本正好可以解決這個問題。

既然前面提到線性結構的組成,那麼我們就在說說鍊錶分為哪些:它可分為

單向鍊錶,雙向鍊錶,迴圈鏈

表和雙向迴圈鍊錶,這些我們後期再討論這些。好了,該回到今天的主題上來了——動態順序表的實現!

首先,動態順序表的功能在標頭檔案中已經全部列出來了,在排序的時候給出了三種方式:氣泡排序,直接插入排序和選擇排序。在實現測試函式的時候記得列印選單中的順序需要和case語句中的順序保持一致哦,我在這就栽過跟頭。。。還值得注意的是:在我們的測試函式中,應當建立乙個結構體變數,然後呼叫函式的時候把其位址傳進去,否則傳值的話會有壓棧的開銷,這樣一來時間和空間就都浪費很大了。

下來我們就用**實現它:

seqlist.h

#define _crt_secure_no_warnings 1

#ifndef _seqlist_d_h_

#define _seqlist_d_h_

#include#include#include#define default_sz 2

#define inc_sz 2

typedef int datatype;

typedef struct seqlist

seqlist,*pseqlist;

void printseqlist(pseqlist pseq); //順序表列印輸出

void initseqlist(pseqlist pseq); //進行初始化

void destroyseqlist(pseqlist pseq);

void pushback(pseqlist pseq,datatype x);//在順序表尾部插入元素

void popback(pseqlist pseq); //在順序表尾部刪除元素

void pushfront(pseqlist pseq,datatype x);//在順序表頭部插入元素

void popfront(pseqlist pseq); //在順序表頭部刪除元素

void insert(pseqlist pseq,int pos,datatype x);//在順序表指定位置插入元素

void erase(pseqlist pseq,datatype pos); //在指定位置刪除該元素

void remove(pseqlist pseq,datatype x); //刪除指定元素

void removeall(pseqlist pseq,datatype x); //刪除所有指定的元素

void bubblesort(pseqlist pseq); //氣泡排序

void insertionsort(pseqlist pseq); //直接插入排序

void selectsort(pseqlist pseq); //選擇排序

int binarysearch(pseqlist pseq,datatype x); //二分查詢

#endif

seqlist.c

#include"seqlist.h"

void printseqlist(pseqlist pseq) //順序表列印輸出

}void initseqlist(pseqlist pseq) //進行初始化

pseq->sz=0;

pseq->capacity=0;

memset(pseq->data,0,default_sz*sizeof(datatype));

}void destroyseqlist(pseqlist pseq)

void check_capacity(pseqlist pseq)

pseq->data=tmp;

pseq->capacity+=inc_sz; }}

void pushback(pseqlist pseq,datatype x) //在順序表尾部插入元素

void popback(pseqlist pseq) //在順序表尾部刪除元素

pseq->sz--;

}void pushfront(pseqlist pseq,datatype x) //在順序表頭部插入元素

pseq->data[0]=x;

pseq->sz++;

}void popfront(pseqlist pseq) //在順序表頭部刪除元素

for(i=0;isz;i++)

pseq->sz--;

}void insert(pseqlist pseq,int pos,datatype x) //在順序表指定位置插入元素

pseq->data[pos]=x;

pseq->sz++;

}void erase(pseqlist pseq,datatype pos) //在順序表指定位置刪除元素

for(i=pos;isz-1;i++)

pseq->sz--;

}void remove(pseqlist pseq,datatype x) //刪除指定元素

for(i=ret;isz;i++)

pseq->sz--;

}void removeall(pseqlist pseq,datatype x) //刪除所有指定的元素

for(i=ret;isz;i++)

pseq->sz--;

ret++; }}

void bubblesort(pseqlist pseq) //氣泡排序

} if(flag==0)

m=k; //將k設定為最後一次交換的位置 }}

void insertionsort(pseqlist pseq) //直接插入排序

pseq->data[j+1]=tmp; }}

void selectsort(pseqlist pseq) //選擇排序

if(min!=i)

} }}

int binarysearch(pseqlist pseq,datatype x) //二分查詢

else

return mid; //返回要查詢值的下標,否則要查詢的可能也為-1

} return -1;

}

test.c

#include "seqlist.h"

void menu()

void test()

else

printf("查詢失敗!\n");

}if(ret==-1)

break;

case 14:

destroyseqlist(&seq);

break;

case 15:

printf("請輸入要刪除元素的位置:");

scanf("%d",x);

erase(&seq,x);

default:

printf("輸入錯誤!");

break;

} }}int main()

順序表的功能實現

順序表的建立,插入,刪除,清空,銷毀,查詢,輸出功能 include include include definetrue 1 definefalse 0 defineok 1 defineerror 0 defineinfeasible 1 defineoverflow 2 typedefint ...

動態順序表的實現

寫這篇部落格主要是講述一下動態順序表的實現,其中包含 列印 建立 銷毀 尾部插入 尾部刪除 頭部插入 頭部刪除 在順序表的pos位置上插入元素x 刪除順序表pos位置上的元素 順序表中查詢資料x,返回該元素在順序表中的位置 修改pos位置的資料 氣泡排序 選擇排序 查詢已排序順序表中的元素x 等操作...

動態實現順序表

順序表是在計算機記憶體中以 陣列的形式儲存的線性表,是指用一組位址連續的 儲存單元 依次儲存 資料元素 的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的 儲存單元中。下面來進行順序表的動態實現 標頭檔案 ifndef seqlist ...