(資料結構)靜態順序表的實現

2021-08-20 00:21:37 字數 3446 閱讀 6602

#pragma once

#include#include#define max_size 10

typedef int datatype;

typedef struct seqlist

seqlist,*pseqlist;

靜態順序表的特點是順序表中的元素個數是固定的,這裡的max_size等於10,就說明順序表中最多存放10個資料。

//順序表初始化

void seqlistinit(pseqlist ps)

順序表初始化操作就是把順序表中表示有效元素的個數的變數置為0

//順序表尾插資料

void seqlistpushback(pseqlist ps, datatype data)

if(ps->_size == max_size)

ps->_array[ps->_size] = data;

ps->_size++;

}

尾插操作要先判斷順序表是否存在,然後判斷有效元素個數的數量是否達到max_size,之後在順序表尾部ps->size處插入資料data(下標比size少1,所以size即表示插入時所需的下標)

//順序表尾刪

void seqlistpopback(pseqlist ps)

ps->_array[ps->_size-1] = 0;

--ps->_size;

}

尾刪操作先判斷順序表是否存在,再判斷順序表是否為空(為空直接返回)

//順序表頭插資料

void seqlistpushfront(pseqlist ps, datatype data)

for(i = ps->_size-1; i>=0;--i)

ps->_array[0] = data;

ps->_size++;

}

頭插操作要先判斷順序表是否存在,然後判斷有效元素個數的數量是否達到max_size,先將前size個元素全部向後移動一位,留出下標為0的位置的空間將data放進去

//順序表頭刪資料

void seqlistpopfront(pseqlist ps)

for(;i < ps->_size-1; i++)

ps->_size--;

}

頭刪開始和尾刪相同,都先判斷。然後將前size個元素全部向前移動一位(下標為0的元素被覆蓋),完成頭刪操作

//顯示順序表中的資料個數

int seqlistsize(pseqlist ps)

return ps->_size;

}

先判空,不滿足條件列印size

//列印順序表

void printseqlist(pseqlist ps)

for(; i_size;++i)

printf("%d",ps->_array[i]);

printf("\n");

}

先判空,然後列印前size個元素

//任意位置插入

void seqlistinsert(pseqlist ps,int pos, datatype data)

if(max_size == ps->_size)

for(i = ps->_size-1;i >= pos;--i)

ps->_array[pos] = data;

ps->_size++;

}

判斷條件:順序表是否存在,pos滿足大於0且小於size,順序表沒有滿。將從後往前數size-pos個元素向後移動留出下標為pos的位置的空間插入data

//任意位置的刪除

void seqlisterase(pseqlist ps,int pos)

if(0 == ps->_size)

for(; i < ps->_size-1;i++)

ps->_size--;

}

判斷條件:順序表是否存在,pos大於0且pos小於size,順序表是否為空。將從後往前size-pos個元素全部向前移動一位(下標為pos的元素被覆蓋),完成刪除操作

// 在順序表中查詢值為第乙個data的元素,找到返回該元素在順序表中的位置,否則返回-1 

int seqlistfind(pseqlist ps,datatype data)

return -1;

}

從下標為0的元素開始找起,找到data元素返回其下標,沒找到返回-1

// 移除順序表中第乙個值為data的元素

void remove(pseqlist ps, datatype data)

使用函式seqlistfind(查詢元素)和seqlisterase(刪除任意位置的元素)實現該操作

// 移除順序表中所有值為data的元素 

void removeall(pseqlist ps, datatype data)

ps->_size -= count;

}

定義乙個計數變數count,每當找到順序表中對應的data元素時,count++,找到乙個就需要把從後往前i-count個元素全部向前移動一位(當count改變且第一次執行else操作時的i-1為找到data元素的下標,i-count為所需移動的位數。例:第一次找到data時,count=1,每次向前移動一位,第二次找到data是count=2,從第二次找到data的下標i-1開始,每次向前移動兩位)

void swap(int* pleft, int *pright)

// 使用氣泡排序對順序表中的元素進行排序

void bubblesort(pseqlist ps)

} if(!ischange)

break;

}}

swap函式為輔助函式,作用是交換兩個變數的值。

從下標為i的元素開始排序,把元素值較大的元素放在最後

ischange變數的作用是,在第一趟冒泡的排序的時候,如果順序表本來就有序,則無需進行後續的排序操作,迴圈直接退出

//選擇排序

void selectsort(pseqlist ps)

if(maxpos != ps->_size -1 -i)

swap(&ps->_array[maxpos],&ps->_array[ps->_size-1-i]);

}}

標記最大元素的下標,一趟排序結束後和第size-1-i位置的元素做比較,將最大的元素放在此位置。

缺陷:只能從小到大排序。

優化方式:定義乙個函式指標,使用者自己決定選擇排序方式。

資料結構靜態順序表

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 有效的元素個...