用C語言實現順序表的增刪查改和逆置

2021-07-22 13:21:58 字數 3172 閱讀 9867

在資料結構中,我們最開始接觸的就是順序表,那麼順序表是什麼呢?順序表是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組位址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。

既然它有陣列的特點,又具有線性這一特徵,那麼最基本的增、刪、查、改、逆置肯定是必須掌握的,今天我們來盤點一下怎樣對順序表中的元素進行增刪查改和逆置。

函式原型:

void initseqlist(pseqlist seq); //初始化順序表

void pushback(pseqlist pseqlist, datatype data); //尾插法插入元素

void popback(pseqlist pseqlist); //尾插法移出元素

void pushfront(pseqlist pseplist, datatype data); //頭插法插入元素

void popfront(pseqlist pseqlist); //頭插法移出元素

void insert(pseqlist pseqlist, int pos, datatype data); //任意位置插入元素

void erase(pseqlist pseqlist, int pos); //刪除指定位置的元素

int find(pseqlist pseqlist, datatype data); //查詢元素

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

int empty(pseqlist pseqlist); //判滿

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

void inverse(pseqlist pseqlist); //逆置順序表

void change(pseqlist pseqlist,datatype data1,datatype data2); //將順序表中指定元素進行修改

源**如下:

#include

#include

#include

#define max_size 10

typedef

int datatype;

typedef

struct seqlist

seqlist,*pseqlist;

void initseqlist(pseqlist seq) //初始化順序表

int empty(pseqlist seq) //判滿

void pushback(pseqlist seq, datatype data) //尾插法插入元素

seq->array[seq->size]=data;

seq->size++;

}void popback(pseqlist seq) //尾插法刪除元素

--seq->size;

}void pushfront(pseqlist seq, datatype data) //頭插法插入元素

for(i=seq->size;i>0;i--)

seq->array[0]=data;

seq->size++;

}void popfront(pseqlist seq) //頭插法刪除元素

for(i=0;isize-1;i++)

--seq->size;

}void insert(pseqlist seq, int pos, datatype data) //任意位置插入元素

for(i=seq->size;i>pos;i--)

seq->array[pos]=data;

seq->size++;

}void erase(pseqlist seq, int pos) //刪除任意位置元素

for(i=pos;isize;i++)

--seq->size;

}int find(pseqlist seq, datatype data) //在順序表中查詢元素

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

}printf("順序表中不存在該元素!\n");

return;

}void remove(pseqlist seq, datatype data) //在順序表中刪除給定元素

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

--seq->size;

return;}}

printf("%d不存在!\n",data);

}void printseqlist(pseqlist seq) //列印順序表

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

printf("\n");

}void inverse(pseqlist seq) //順序表的逆置

for(i=0;i<(seq->size)/2;i++)

}void change(pseqlist seq,datatype data1,datatype data2) //將順序表中指定元素進行修改

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

}printf("%d不存在!\n",data1);

}

測試函式:

void text()

int main()

在這裡我們可以對順序表做乙個總結:

實現方法簡單。在很多高階語言中都有陣列型別,總體是比較容易實現的。

每個元素的儲存位置可以用乙個簡單的公式來計算。

查詢和列印操作都以線性的時間來執行,移出元素花費的時間比較固定。所以非常適合於那些需要經常進行查詢操作的情況。

順序儲存的空間是靜態分配的,需要事先指定max_size的大小。也因此可能會造成空間的浪費。

插入和刪除的代價非常高昂,這兩種操作在最壞的情況下的時間複雜度為o(n),平均估計這兩種操作需要移動一半的元素。

在順序表中插入或者刪除乙個元素,是非常複雜的,它需要把元素乙個乙個移動,然後插入或者刪除。所以在順序表做插入或刪除是很浪費的行為,平均每個結點移動的次數約為表長的一半,時間複雜度相對而言也比較高。如果建立的模型有太多需要插入刪除的元素,是否選用順序表就需要綜合考慮了。

順序表的增刪查改(C語言實現)

common.h ifndef common h define common h include include include include include include 檢查記憶體洩漏 pragma warning disable 4996 define elemtype int defin...

順序表的增 刪 查 改實現(c語言)

資料結構順序表 實現增 刪 查 改四個功能 具體 如下 include include pragma warning disable 4996 define num 10 typedef int datetype typedef struct seqlist seqlist void test se...

實現順序表的增刪查改

線性表分為兩種 順序表 順序儲存 和鍊錶 鏈式儲存 這裡實現一下順序表管理資料的增刪查改操作 標頭檔案自定義標頭檔案中一般存放自定義函式的函式宣告 sqlist.h pragma once include include include typedef int sqldatatype typedef...