靜態順序表的實現(C語言)

2021-08-04 09:22:35 字數 3533 閱讀 1893

先來了解一下什麼是順序表。

順序表是在計算機記憶體中以

陣列的形式儲存的線性表,是指用一組位址連續的

儲存單元

依次儲存

資料元素

的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。

來看一下什麼是連續儲存

像a b c d 這樣就是連續儲存的。 **

標頭檔案seqlist.h部分

#ifndef __seqlist_h__

#define __seqlist_h__

#include #include #include #include #define max 10

//陣列元素個數

typedef int datatype;

//陣列元素型別重新命名

typedef struct seqlist

seqlist,*pseqlist;

void initseqlist(pseqlist ps);

//初始化函式

void pushback(pseqlist ps, datatype x);

//從後邊新增的函式

void printseqlist(const pseqlist ps);

//列印陣列的函式

void popback(pseqlist ps);

//從後往前刪除的函式

void pushfront(pseqlist ps, datatype x);

//從前邊新增的函式

void popfront(pseqlist ps);

//從前往後刪除的函式

void insert(pseqlist ps, int pos, datatype x);

//指定位置新增的函式

int find(pseqlist ps, datatype x);

//查詢函式

void remove(pseqlist ps, datatype x);

//刪除指定某個數的函式

void removeall(pseqlist ps, datatype x);

//刪除所有的指定的某個值的函式

void reverselist(pseqlist ps);

//逆序函式

void sortlist(pseqlist ps);

//排序函式

int binarysearch(pseqlist ps, datatype x);

//二分查詢函式

#endif

說明:typedef int datatype是為了將陣列元素的型別int重新命名,為什麼要重新命名呢?

因為陣列有可能是int型別,也有可能是float型別,double型別等等,加入我們就將陣列定義為int型別,當我們需要其他型別的時候就要去整個**中找出所有用到型別的地方逐一改正,這是很麻煩的。當我們將型別重新命名後,只需要在這個地方將int改為其他所需要的型別就ok了。

各個函式的實現seqlist.c部分

#define _crt_secure_no_warnings

#include "seqlist.h"

void initseqlist(pseqlist ps)

void pushback(pseqlist ps, datatype x)

ps->data[ps->sz] = x;

ps->sz++;

}void printseqlist(const pseqlist ps)

for (i = 0; i < ps->sz; i++)

printf("\n");

}void popback(pseqlist ps)

ps->sz--;

}void pushfront(pseqlist ps, datatype x)

memmove(ps->data+1, ps->data, (ps->sz)*sizeof(datatype));

ps->data[0] = x;

ps->sz++;

}void popfront(pseqlist ps)

memmove(ps->data, ps->data + 1, (ps->sz - 1)*sizeof(datatype));

ps->sz--;

}void insert(pseqlist ps, int pos, datatype x)

memmove(ps->data+pos+1, ps->data + pos, (ps->sz -pos)*sizeof(datatype));

ps->data[pos] = x;

ps->sz++;

}int find(pseqlist ps, datatype x)

for (i = 0; i < ps->sz; i++) }

return -1;

}void remove(pseqlist ps, datatype x)//指定刪除

ret = find((pseqlist)ps->data, x);

if (ret != -1) }

void removeall(pseqlist ps, datatype x)

for (i = 0; i < ps->sz; i++) }

}void reverselist(pseqlist ps)

while (left < right) }

void sortlist(pseqlist ps)

for (i = 0; i < ps->sz-1; i++)

} }}

int binarysearch(pseqlist ps, datatype x)

while (left < right)

else if (ps->data[mid] < x)

else

}return -1;

}

說明:一定要記得進入函式第一件事就是檢查指標是否為空指標,因為後邊要對該指標進行引用,對空指標引用會導致程式崩潰的。所以assert斷言是非常重要的。

測試函式test.c部分

#define _crt_secure_no_warnings

#include "seqlist.h"

void test1()

void test2()

void test3()

void test4()

void test5()

void test6()

void test7()

void test8()

int main()

說明:想要測試那個函式的功能只需將對應的已被注釋掉的測試函式放開就行了

c語言實現靜態順序表

標頭檔案如下 ifndef s l define s l include include include pragma warning disable 4996 define max size 10 typedef int datatype typedef struct seqlist seqlis...

C語言實現靜態順序表

靜態順序表是儲存在乙個連續的陣列中的,因此對其資料型別有乙個結構體宣告。尾插 void seqpushback seqlist pseq,datatype x pseq a pseq size x 尾刪 void seqpopback seqlist pseq 頭插 void seqpushfron...

C語言實現順序表 靜態

ifndef seqlist h define seqlist h typedef int datatype define max size 10 順序表的容量,可調整 typedef struct seqlist seqlist void seqlistinit seqlist pseq 初始化 ...