資料結構 順序表及其各個介面的實現

2021-08-30 14:05:15 字數 4247 閱讀 5099

在聊順序表之前,我們先來說一下線性表。

什麼是線性表呢?

線性表是n個具有相同特性的資料元素的有限序列。線性表是一種在實際中廣泛使用的資料結構,常見的線性表有:順序表,鍊錶,棧,佇列,字串....

線性表在邏輯上是線性結構,也就是說是連續的一條直線。但在物理結構上並不一定是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。如下圖所示:

由上可知,其實順序表是乙個線性表。

順序表是用一段實體地址連續儲存單元依次儲存資料元素的線性結構,- -般情況下採用陣列儲存。在陣列上完成資料的增刪查改。

順序表一般可以分為:

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

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

//順序表的靜態儲存

#define n 100

typedef int sldatatype;

typedef struct seqlist

sldatatype array[n]; //定長陣列

size_ t   size ;  //有效資料的個數 

}seqlist;

//順序表的動態儲存

typedef struct seqlist

sldatatype* array; //指向動態開闢的陣列

size_ t size ;//有效資料個數

size_ t capicity ; //容量空間的大小

} seqlist ;

介面實現:靜態順序表只適用於確定知道需要存多少資料的場景。靜態順序表的定長陣列導致n定大了,空間開多了浪費,開少了不夠用。所以現實中基本都是使用動態順序表,根據需要動態的分配空間大小,所以下面我們實現動態順序表。

#pragma once//windows vs

#ifndef _seqlist_h_//vs+gcc

#define _seqlist_h_

#include #include #include #include 靜態順序表

//#define n 10

//typedef int sldatetype;

//struct seqlist

//;//void seqlistinit(seqlist*psl);//初始化

//void seqlistdestory(seqlist*psl);//銷毀

////void seqlistpushback(seqlist*psl, sldatetype x);//尾插

//void seqlistpopback(seqlist*psl);//頭插

//void seqlistpushfront(seqlist*psl, sldatetype x);//尾刪

//void seqlistpopfront(seqlist*psl);//頭刪

////void seqlistinsert(seqlist*psl,size_t pos, sldatetype x);//中間插入

//void seqlisterase(seqlist*psl, size_t pos, sldatetype x);//給下標,刪除下標處的東西

//void seqlistremove(seqlist*psl, size_t pos, sldatetype x);//給乙個x,刪除它

//動態順序表

typedef int sldatetype;

typedef struct seqlist

seqlist;

void checkcapacity(seqlist*psl);

void seqlistinit(seqlist* psl,size_t capacity);//初始化

void seqlistdestory(seqlist* psl);//銷毀

void seqlistpushback(seqlist* psl, sldatetype x);//尾插

void seqlistpopback(seqlist* psl);//頭插

void seqlistpushfront(seqlist* psl, sldatetype x);//尾刪

void seqlistpopfront(seqlist* psl);//頭刪

int seqlistfind(seqlist*psl,sldatetype x);

void seqlistinsert(seqlist* psl, size_t pos, sldatetype x);//中間插入

void seqlisterase(seqlist* psl, size_t pos);//給下標,刪除下標處的東西

void seqlistremove(seqlist* psl,sldatetype x);//給乙個x,刪除它

void seqlistprint(seqlist* psl);

void seqlistmodify(seqlist*psl, size_t pos, sldatetype x);

void testseqlist();

void seqlistbubblesort(seqlist*psl);

void seqlistbinaryfind(seqlist*psl, sldatetype x);

void seqlistremoveall(seqlist*psl, sldatetype x);

#endif //_seqlist_h_

#include "seqlist.h"

void seqlistinit(seqlist* psl, size_t capacity)//初始化

else }

void seqlistdestory(seqlist*psl)//銷毀

void checkcapacity(seqlist*psl)

tmp = realloc(psl->_a, psl->_capacity * 2 * sizeof(sldatetype));

assert(tmp);

psl->_a = tmp;

psl->_capacity *= 2; }}

void seqlistpushback(seqlist*psl, sldatetype x)//尾插

void seqlistpopback(seqlist*psl)//尾刪

}void seqlistpushfront(seqlist*psl, sldatetype x)//頭插

psl->_a[0] = x;

psl->_size++;

}void seqlistpopfront(seqlist*psl)//頭刪

psl->_size--; }

}void seqlistinsert(seqlist*psl, size_t pos, sldatetype x)//中間插入

psl->_a[pos] = x;

psl->_size++;

}void seqlisterase(seqlist*psl, size_t pos)//給下標,刪除下標處的東西

--psl->_size;

}int seqlistfind(seqlist*psl,sldatetype x)

} return -1;

}void seqlistremove(seqlist*psl,sldatetype x)//給乙個x,刪除它

}void seqlistprint(seqlist* psl)

printf("\n");

}void seqlistmodify(seqlist*psl, size_t pos, sldatetype x)

void seqlistbubblesort(seqlist*psl);

void seqlistbinaryfind(seqlist*psl, sldatetype x);

void seqlistremoveall(seqlist*psl, sldatetype x);

void testseqlist()

#define _crt_secure_no_warnings 1

#include "seqlist.h"

int main()

資料結構 順序表構建及其基本操作

總述 順序表是最簡單的資料結構之一,在計算機中順序表一般以陣列的形式儲存,我們都知道陣列是線性儲存的,因此順序表也是線性儲存的,線性表的連續儲存值得是在計算機中用一塊連續的儲存空間儲存線性表的元素,所以線性表的相鄰元素是儲存在連續的儲存單元上的。順序表的儲存結構typedef struct sqli...

資料結構 順序表

順序表的特徵 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...