資料結構 靜態順序表

2021-08-27 04:03:21 字數 2534 閱讀 3415

資料型別的定義:

typedef

int datatype;

typedef

struct seqlist

seqlist, *pseqlist;

建立變數的初始化和銷毀:
void initseqlist(pseqlist ps)

void destroyseqlist(pseqlist ps)

順序表的列印:

這一函式是為了除錯方便

void printseqlist(const pseqlist ps)

printf("\n");

}

儘管函式內部不需要對順序表做修改,但是為了減少函式壓棧時帶來的額外系統開銷,提高**執行效率,故此處仍然採用傳址的方式

assert和用if語句進行判斷的區別:

用assert進行斷言,表明為null時非法;而在使用if語句進行判斷的時候,表明為空是一種合法狀態,只是要使用if語句進行特殊處理

增加元素操作

在不同的位置刪除可以分別封裝不同的操作

增加元素時所指出的位置,即在該位置之前插入元素

}刪除元素操作(按位置刪除)

刪除所指定位置的元素

刪除指定的所有元素(按元素刪除)

第一種演算法實現是基於兩層迴圈,外層迴圈遍歷找到所有所要刪除元素的位置,內層迴圈是基於erase()的刪除操作

void removeall(pseqlist ps, datatype d)

ps->size--;

continue;//後面元素整體向前移動1個元素大小,此位置元素被覆蓋,故不需增加下標,用continue結束本次迴圈

}i++;}}

很顯然,這種演算法的時間複雜度是o(n^2)

優化版本的演算法是將不需刪除的元素挨個從順序表的初始位置往後放,遍歷完真個順序表,所有需要保留的元素便處於順序表的前面,然後再調整順序表的大小即可

這個演算法的時間複雜度是o(n)

檢視屬性操作

int isfull(pseqlist ps)

return ret;

}int isempty(pseqlist ps)

return ret;

}int seqlistsize(pseqlist ps)

在對順序表進行增刪操作的時候可以使用memmove()進行功能的實現,但為了練習迴圈過程中邊界的判斷,所以採用了通過迴圈乙個元素乙個元素分別移動的方式進行

需要注意的是,在移動過程中

增加元素時,從後向前依次移動,需要移動元素的下標邊界是從pos到size-1,移動到的空間下標是從pos+1到size

刪除元素時,從前向後一次移動,需要移動元素的下標邊界是從pos+1到size-1,移動到的空間下標是從pos到size-2

資料結構靜態順序表

define max size 10 typedef int datatype struct seqlist 以上 就是建立乙個順序表,其中seqlist是整個順序表的空間而size是順序表中元素的個數。接下來我將用靜態順序表來實現尾插,頭插,任意插入資料,尾刪,頭刪等 標頭檔案 ifndef se...

資料結構 靜態順序表

本篇全部 都在linux系統下完成 用一段位址連續的單元依次儲存資料元素的線性結構,順序表又分為靜態順序表和動態順序表 首先建立乙個結構體seqlist,在結構體中我們定義了乙個陣列seqlist,用來存放資料,以及乙個無符號整形變數size,用來控制順序表有效資料的個數。即我們通過乙個簡單的陣列實...

資料結構靜態順序表

順序表 用一段位址連續儲存單元依次儲存資料元素的線性結構 pragma once 防止標頭檔案重複包含 define max size 10 include include include 實現基於靜態陣列的順序表的以下基本操作 首先先定義乙個結構體型別seqlist arr size 有效的元素個...