動態順序表的增刪改查及相關操作

2021-09-25 18:51:19 字數 4601 閱讀 2887

順序表的概念及結構

靜態順序表:使用定長陣列儲存。

動態順序表:使用動態開闢的陣列儲存

// 順序表的靜態儲存 

#define n 100

typedef

int datatype;

typedef

struct seqlist seqlist;

靜態順序表只適用於知道了需要存多少資料的場景,比較死板,其中的定長陣列更是存在嚴重問題,空間開多了浪費,開少了不夠用。

在日常工作中,基本都是使用動態順序表,根據需要動態的分配空間大小。

所以下面實現動態順序表:

標頭檔案:「seqlist.h」

#pragma once

#include

#include

#include

#include

typedef size_t sldatatype;

#define default_size 5

#define inc_size 2

typedef

struct seqlist seqlist;

void

seqlistinit

(seqlist* plist)

;//初始化

void

seqlistdestory

(seqlist* plist)

;//銷毀

void

checkcapacity

(seqlist* plist)

;//檢查容量是否需要增容

void

seqlistpushback

(seqlist* plist, sldatatype data)

;//尾插

void

seqlistpopback

(seqlist* plist)

;//尾刪

void

seqlistpushfront

(seqlist* plist, sldatatype data)

;//頭插

void

seqlistpopfront

(seqlist* plist)

;//頭刪

size_t seqlistfind

(seqlist* plist, sldatatype data)

;//在順序表中查詢指定元素

void

seqlistinsert

(seqlist* plist, size_t pos, sldatatype data)

;//在指定位置插入指定元素

void

seqlisterase

(seqlist* plist, size_t pos)

;//刪除指定位置的元素

void

seqlistremove

(seqlist* plist, sldatatype data)

;//刪除指定元素

void

seqlistremoveall

(seqlist* plist, sldatatype data)

;//刪除順序表中所有指定元素

void

seqlistmodify

(seqlist* plist, size_t pos, sldatatype data)

;//修改指定位置的元素為指定值

void

seqlistprint

(seqlist* plist)

;//列印順序表

void

reverse

(seqlist* plist)

;//逆置順序表

void

seqlistbubblesort

(seqlist* plist)

;//氣泡排序順序表

size_t seqlistbinaryfind

(seqlist* plist, sldatatype data)

;//在順序表中二分查詢指定元素

功能實現:「seqlist.c」

#include

"seqlist.h"

//初始化順序表

void

seqlistinit

(seqlist* plist)

memset

(plist->array,0,

sizeof

(sldatatype)

*default_size);}

//銷毀順序表

void

seqlistdestory

(seqlist* plist)

//檢查順序表的容量

void

checkcapacity

(seqlist* plist)

plist->array = ret;

plist->capacity +

= inc_size;}}

//列印順序表

void

seqlistprint

(seqlist* plist)

}//尾插

void

seqlistpushback

(seqlist* plist, sldatatype data)

plist->array[plist->size]

= data;

plist->size++;}

//尾刪

void

seqlistpopback

(seqlist* plist)

plist->size--;}

//頭插

void

seqlistpushfront

(seqlist* plist, sldatatype data)

//注意這裡的迴圈條件是從後向前的,把前乙個值賦給後乙個值,只能是i-1賦給i

//而不可以是i賦給i+1,兩者本質上是一樣的,但後者在賦值的過程中,

//會出現越界的情況,程式會崩潰

for(

int i = plist->size; i >

0; i--

) plist->array[0]

= data;

plist->size++;}

//頭刪

void

seqlistpopfront

(seqlist* plist)

//從頭遍歷,將陣列中後乙個數賦給前乙個,達到覆蓋的效果

for(size_t i =

0; i < plist->size; i++

) plist->size--;}

//查詢

size_t seqlistfind

(seqlist* plist, sldatatype data)

//沒找到

return-1

;}//在指定位置插入元素

void

seqlistinsert

(seqlist* plist, size_t pos, sldatatype data)

for(size_t i = plist->size; i > pos -1;

--i)

plist->array[pos -1]

= data;

plist->size++;}

//刪除指定位置的元素

void

seqlisterase

(seqlist* plist, size_t pos)

plist->size--;}

}//刪除指定元素

void

seqlistremove

(seqlist* plist, sldatatype data)

}//刪除陣列中所有指定元素

void

seqlistremoveall

(seqlist* plist, sldatatype data)

seqlisterase

(plist, i);}

}//修改指定位置的元素為給定元素

void

seqlistmodify

(seqlist* plist, size_t pos, sldatatype data)

}else

}void

swap

(size_t *a, size_t *b)

//逆置順序表

void

reverse

(seqlist* plist)

}//氣泡排序順序表

void

seqlistbubblesort

(seqlist* plist)}if

(flag ==1)

}}//二分查詢指定元素

size_t seqlistbinaryfind

(seqlist* plist, sldatatype data)

return-1

;}

測試:「test.c」

#include

"seqlist.h"

void

test()

intmain()

動態順序表的增刪改查

順序表還是相對於比較簡單的資料結構,所謂動態,不過是在初始化時 賦予動態空間,所以說,就直接看 了。標頭檔案 pragma once sequence list define crt secure no warnings 1 include include include include typed...

實現對動態順序表的增刪改查

增刪改查的操作類 public class seqlist 判滿 public boolean isfull return false 判空 public boolean empty return true 列印順序表 public void display system.out.println 在...

順序表 增刪改操作

1.從鍵盤依次輸入10個整數 彼此以若干空格隔開 在記憶體中建立乙個順序表。然後完成以下操作 查詢 輸入乙個欲查詢的整數,找到則顯示第乙個相匹配的整數在順序表中所處的位置,若不存在,則顯示 not found 刪除 輸入乙個表示欲刪除整數的位置的整數i 注意i的合法性 在順序表中刪除該數,並保證刪除...