基礎資料結構(一)---(最全)定長順序表的實現
定長順序表的實現
定義
順序表:是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組地址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組地址連續的儲存單元中。
儲存結構:
儲存的資料但在邏輯上是連續的,在儲存 的物理空間上是不連續的。每個資料都有一個直接前驅和後繼(除了第一個和最後一個)
定長順序表:
儲存的資料在邏輯上是連續的,在儲存的物理空間上也是連續的。類似於陣列
圖例如下
功能的實現
1、初始化
2、插入
3、頭插
4、尾插
5、按位置刪除
6、頭刪
7、尾刪
8、按值刪除
9、按值查詢
10、銷燬
結構體
#define INITSIZE 100
typedef int ElemType;
typedef struct
{
ElemType* data;//data用來儲存申請的空間的首地址
int length;//當前已儲存的資料元素的個數
int size;//記錄當前空間的大小
}SqList;
初始化
void InitSqList(SqList* sq)
{
if (sq == NULL) exit(0);
sq->data = (ElemType*)malloc(sizeof(ElemType) * INITSIZE);
if (sq->data == NULL) exit(0);
sq->length = 0;
sq ->size = INITSIZE;
}
插入
void InsertSqList(SqList *sq, ElemType val, int pos)
{
if (sq == NULL) exit(0);
if (pos<0 || pos>sq->length)
{
printf("Insert:: pos is error\n");
return;
}
if (sq->length == sq->size)
{
if (-1 == AppendSpqce(sq))
{
printf("Insert::AppendSpace fail\n");
return;
}
}
for (int i = sq->length; i > pos; --i)
{
sq->data[i] = sq->data[i - 1];
}
sq->data[pos] = val;
sq->length++;
}
頭插
void InsertSqListHead(SqList *sq,ElemType val,int pos)
{
InsertSqList(sq, val, 0);
}
尾插
void InsertSqListTail(SqList *sq , ElemType val)
{
if (sq == NULL) exit(0);
InsertSqList(sq, val, sq->length);
}
按位置刪除
void SqListDeletePos(SqList *sq, int pos)
{
if (sq == NULL) exit(0);
if (pos<0 || pos>sq->length)
{
printf("Delete:: pos is error\n");
return;
}
for (int i = pos; i < sq->length - 1; i++)
{
sq->data[i] = sq->data[i + 1];
}
sq->length--;
}
頭刪
void SqListDeleteHead(SqList *sq)
{
SqListDeletePos(sq, 0);
}
尾刪
void SqListDeleteTail(SqList *sq)
{
if (sq == NULL) exit(0);
if (sq->length == 0) return;
sq->length--;
}
按值刪除
void SqListDeleteValue(SqList *sq, ElemType val)
{
if (sq == NULL) exit(0);
int count = 0;
for (int i = 0; i + count < sq->length;)
{
if (val == sq->data[i])
{
count++;
}
else
{
i++;
}
sq->data[i] = sq->data[i + count];
}
sq->length -= count;
}
按值查詢
int FindValueLast(SqList *sq, ElemType val)
{
if (sq == NULL) exit(0);
int index = -1;
for (int i = 0; i < sq->length; ++ i)
{
if (sq->data[i] == val)
{
index -1;
}
}
return index;
}
銷燬
void SqListDestroy(SqList *sq)
{
if (sq == NULL) exit(0);
free(sq->data);
sq->data == NULL;//防止出現野指標
sq->length = 0;
}
此文章僅代表自己(本菜鳥)學習積累記錄,或者學習筆記,如有侵權,請聯絡作者刪除。人無完人,文章也一樣,文筆稚嫩,在下不才,勿噴,如果有錯誤之處,還望指出,感激不盡~
技術之路不在一時,山高水長,縱使緩慢,馳而不息。
相關文章
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 資料結構c語言實現順序表基本操作資料結構C語言
- 資料結構 - 線性表 - 順序表資料結構
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 具體實現程式碼@資料結構探險——順序表資料結構
- 考研資料結構-線性表-順序表資料結構
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 順序表的實現
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- python演算法與資料結構-順序表(37)Python演算法資料結構
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- Java實現順序表Java
- 資料結構基礎--雜湊表資料結構
- 資料結構 順序棧(c語言)資料結構C語言
- DS順序表--類實現
- 順序結構
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- c語言資料結構,你可能還不知道的順序表C語言資料結構
- 線性表的使用——順序實現
- 基礎夯實:基礎資料結構與演算法(一)資料結構演算法
- 資料結構初階--二叉樹介紹(基本性質+堆實現順序結構)資料結構二叉樹
- 11 線性表的順序儲存結構
- 順序表有序插入資料
- 線性表之順序儲存結構
- php與資料庫連線如何實現資料的順序和倒序PHP資料庫
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- 資料結構篇_程式設計思想板塊_第一章順序表和連結串列資料結構程式設計
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 自學 資料結構四月二十二日_線性結構之順序表資料結構
- 資料結構知否知否系列之 — 線性表的順序與鏈式儲存篇(8000 多字長資料結構
- 線性表-順序表C語言實現C語言
- 順序表實現二分排序排序
- 【資料結構】二叉樹(順序儲存、鏈式儲存)的JAVA程式碼實現資料結構二叉樹Java
- 資料結構基礎學習之線性表資料結構