動態順序表

2021-09-02 17:05:18 字數 4541 閱讀 1536

1> 定義乙個結構體,結構體存放順序表中成員的相關資訊,其中結構體中定義乙個指標,指向動態開闢的空間,使用時定乙個結構體變數,這個變數通過->操作解引用順序表中的成員。

2> 初始化、刪除順序表。

3> 增刪改查操作的實現。

4> 使用氣泡排序和選擇排序給順序表成員排序;使用二分查詢查詢順序中的成員。

5> 順序表的列印。

1.實現的函式定義在標頭檔案中seqlist.h

#pragma once  //防止標頭檔案被重複使用

// #ifndef endif同理

//資料結構是抽象型別

//資料本身不僅僅是數字

typedef int datatype;

#define init_capacity (2)

typedef struct seqlist

seqlist;

//介面 (函式)

//初始化、銷毀、

//增、刪、查、改

//初始化(函式設計)

void seqlistinit(seqlist* pseq);

//銷毀

void seqlistdestroy(seqlist* pseq);

//擴容

static void expandifrequired(seqlist* pseq);

//增//尾插(盡量和c++的 stl統一)

void seqlistpushback(seqlist* pseq, datatype data);

//頭插

void seqlistpushfront(seqlist* pseq, datatype data);

//中間插入

void seqlistinsert(seqlist* pseq, int pos, datatype data);

//刪//尾刪

void seqlistpopback(seqlist* pseq);

//頭刪

void seqlisttopfront(seqlist* pseq);

//中間刪

void seqlisterase(seqlist* pseq, int pos);

//刪除所有遇到的data

void seqlistremoveall(seqlist* pseq, datatype data);

//查詢

int seqlistfind(seqlist* pseq, datatype data);

//修改

void seqlistrevise(seqlist* pseq, int pos, datatype data);

//傳指標減少空間,不改變值

void seqlistprint(const seqlist* pseq);

//氣泡排序

void seqlistbubblesort(seqlist* pseq);

//選擇排序

void seqlistselectsort(seqlist* pseq);

//二分查詢

int seqlisttwopoint(seqlist* pseq, datatype data);

2. 實現各種函式seqlist.c

#include #include #include #include "seqlist.h"

//初始化(函式設計)

void seqlistinit(seqlist* pseq)

pseq->capacity = init_capacity;

pseq->array = (datatype*)malloc(sizeof(datatype)* pseq->capacity);

pseq->size = 0;

}//銷毀

void seqlistdestroy(seqlist* pseq)

//擴容

static void expandifrequired(seqlist* pseq)

pseq->capacity *= 2;

//1.申請新空間

datatype* newarray = (datatype*)malloc(sizeof(datatype)*pseq->capacity);

//2.資料搬移

for (int i = 0; i < pseq->size; ++i)

//3.釋放老空間,關聯新空間

free(pseq->array);

pseq->array = newarray;

}//增

//尾插(盡量和c++的 stl統一)

void seqlistpushback(seqlist* pseq, datatype data)

//頭插

void seqlistpushfront(seqlist* pseq, datatype data)

/* //i代表資料

for (int i = pseq->size - 1; i >= 0; --i)

*///插入

pseq->array[0] = data;

++pseq->size;

}//中間插入

void seqlistinsert(seqlist* pseq, int pos, datatype data)

//插入

pseq->array[pos] = data;

++pseq->size;

}//刪

//尾刪

void seqlistpopback(seqlist* pseq)

//通常情況

--pseq->size;

}//頭刪

void seqlisttopfront(seqlist* pseq)

//通常情況

for (int i = 1; i < pseq->size; ++i)

--pseq->size;

}//中間刪

void seqlisterase(seqlist* pseq, int pos)

--pseq->size;

}//查詢,找到了返回下標,沒找到返回-1;

int seqlistfind(seqlist* pseq, datatype data)

} return -1;

}//刪除所有遇到的data

void seqlistremoveall(seqlist* pseq, datatype data)

//開闢空間儲存空間複雜度位o(n)

datatype* temparray = (datatype*)malloc(

sizeof(datatype)*pseq->size);

assert(temparray != null);

int j = 0;

//將不是data的數存放在新開闢的空間裡

for (int i = 0; i < pseq->size; ++i) }

for (int i = 0; i < j; ++i)

pseq->size = j;

#endif

//時間複雜度和空間複雜度都為o(n)

int j = 0;

for (int i = 0; i < pseq->size; ++i) }

pseq->size = j;

}//修改

void seqlistrevise(seqlist* pseq, int pos, datatype data)

//傳指標減少空間,不改變值

void seqlistprint(const seqlist* pseq)

printf("\n");

}static swap(datatype* x,datatype* y)

//氣泡排序

void seqlistbubblesort(seqlist* pseq)

} if (count == 0)

}}//選擇排序

void seqlistselectsort(seqlist* pseq)

if (pseq->array[i]>pseq->array[max])

}swap(pseq->array + min, pseq->array + minspace);

swap(pseq->array + max, pseq->array + maxspace);

++min;

--max; }}

//二分查詢

int seqlisttwopoint(seqlist* pseq,datatype data)

else if (pseq->array[mid] < data)

else

}return -1;

}

3. 列印相關函式main.c

動態順序表

ifndef seqlist h define seqlist h define capacity 3 typedef struct seqlist typedef enum tag typedef struct findret void expendseqlist seqlist pseq 擴大容...

動態順序表

動態順序表 引用庫函式 include include 巨集定義 define list init size 4 define list add size 2 define overflow 2 typedef int elemtype elemtype元素型別 定義結構體 typedef stru...

動態順序表

順序表是在進算計記憶體總以陣列的形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。線性表採用的順序儲存就稱之為順序表。順序表是將表中的節點依次存放在計算機記憶體中一組位址連續的儲存單元中。任務要求 實現乙個動態順序表 功能要求 表可以動態增長,尾插元素,尾刪元素,頭插元素,頭...