資料結構 順序表

2021-09-12 14:31:40 字數 3331 閱讀 2811

順序表是在計算機記憶體中以陣列的形式儲存的線性表,線性表的順序儲存是指用一組位址連續的儲存單元依次儲存線性表中的各個元素、使得線性表中在邏輯結構上相鄰的資料元素儲存在相鄰的物理儲存單元中,即通過資料元素物理儲存的相鄰關係來反映資料元素之間邏輯上的相鄰關係,採用順序儲存結構的線性表通常稱為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組位址連續的儲存單元中。

這個就是資料結構中順序表的儲存結構模式,其中data域為資料域,是指向儲存資料元素的空間的指標;length為當前儲存資料的個數,listsize為當前分配的儲存空間的大小及鍊錶的大小

1、順序表的初始化

//初始化順序表

void initsqlist(sqlist *list)

2、順序表的判滿,擴充空間以及插入資料

插入函式

順序表的插入有幾種方法,頭插,尾插以及任意位置插入,都是對順序表進行插入操作。

// 在順序表的指定位置pos插入資料val

int insertsqlist(sqlist *list, int pos, int val)

if (isfull(list))

if (pos<=list->length) }

else if (pos == list->length+1)

else

list->length++;

//printf("insert success\n");

return 1;

}// 在順序表的第乙個位置插入資料

int inserthead(sqlist *list, int val)

if (list->length >= 1) }

else

list->length++;

//printf("insert head place success\n");

return 1;

}// 在順序表的最後乙個位置插入資料

int inserttail(sqlist *list, int val)

if (isfull(list))

list->elem[list->length] = val;

list->length++;

//printf("insert tail place success\n");

return 1;

}

由於順序表的底層是由陣列結構構成的,所以它有著初始的並且固定的大小,當我們進行插入過多的資料時,原有的陣列大小不夠儲存,就需要進行對陣列的擴充,即為順序表的擴充。

//擴充空間

static int expandspace(sqlist *list)

list->listsize = change;

list->elem = (int *)malloc(list->listsize * sizeof(int));

assert(list->elem != null);

return 1;

}

既然陣列我們要進行擴容,那麼我們在什麼時候擴容,這就需要對陣列進行判滿,如果順序表已滿,我們就可以進行擴容。

//判斷是否為滿

static int isfull(sqlist *list)

return false;

}

3、順序表的刪除以及判空

既然有插入,那必定有刪除函式,在刪除函式之前,我們需要為順序表進行判空,在順序表不為空的情況下才可以進行刪除資料。

//順序表的判空操作

static int isempty(sqlist *list)

return false;

}

刪除資料

當然刪除資料也有頭刪,尾刪,任意位置刪除操作

// 刪除指定位置的資料

int deletesqlist(sqlist *list, int pos)

if (isempty(list) || pos >= list->length)

else }

list->length--;

//printf("delete success\n");

return 1;

}// 刪除第乙個資料元素

int deletehead(sqlist *list)

if (list->length > 1) }

else

list->length--;

//printf("delete head place success\n");

return 1;

}// 刪除最後乙個資料元素

int deletetail(sqlist *list)

list->elem[list->length - 1] = null;

list->length--;

//printf("delete tail place success\n");

return 1;

}

4、順序表中資料的查詢

// 查詢val所在的位置(最後一次出現的位置)

int findval(sqlist *list, int val)

for (int i = 0; i < list->length - 1; i++)

else

}printf("index=%d\n",index);

return index;

}

5、順序表的銷毀

//銷毀順序表

void destroysqlist(sqlist *list)

這次我都是用c語言進行實現,c++也是差不多,就不再多闡述了。

6、順序表的使用場景

缺點:插入刪除並不方便:由於順序表的底層實現是由陣列實現的,陣列中的資料都是按順序儲存的,並且還需要進行對陣列的擴容,這就導致了當我們在插入資料時除了尾插,頭插和任意位置插入資料都需要對陣列進行很大幅度的調整,刪除時也是一樣,除了尾刪,頭刪和任意位置刪除都是需要對陣列的結果進行調整的,時間複雜度較高。

優點:查詢方便:由於是陣列構成的,所以在查詢是只需對下標進行查詢,所以時間複雜度較低,查詢的效率很高。

所以順序表一般使用在對資料的插入和刪除操作不頻繁,插入之後基本不會再會對順序表中儲存的資料進行變化的場景,多半利用在經常進行查詢操作的情況下。

資料結構 順序表

順序表的特徵 1由唯一的表名標識 2佔據一塊連續的儲存空間 3資料順序存放,元素之間有先後關係 定義動態的順序表 define maxsize 100 typedef struct sqlist 這個結構體型別存放的是順序表的資訊和順序表的資料 初始化順序表 void initsqlist sqli...

資料結構 順序表

順序表示最簡單的乙個資料結構,直接貼 吧,因為比較簡單。include include typedef struct sqlist sqlist void initlist sqlist l l length 0 void getelem sqlist l 初始化 l length j printf...

資料結構順序表

include include include include include include include include include include include include include include using namespace std define maxn 100000...