基礎資料結構(一)---(最全)定長順序表的實現
定長順序表的實現
定義
順序表:是在計算機記憶體中以陣列的形式儲存的線性表,是指用一組地址連續的儲存單元依次儲存資料元素的線性結構。線性表採用順序儲存的方式儲存就稱之為順序表。順序表是將表中的結點依次存放在計算機記憶體中一組地址連續的儲存單元中。
儲存結構:
儲存的資料但在邏輯上是連續的,在儲存 的物理空間上是不連續的。每個資料都有一個直接前驅和後繼(除了第一個和最後一個)
定長順序表:
儲存的資料在邏輯上是連續的,在儲存的物理空間上也是連續的。類似於陣列
圖例如下
功能的實現
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++
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 資料結構:線性表的順序實現2.2資料結構
- 【資料結構】實現順序表(c語言)資料結構C語言
- 資料結構c語言實現順序表基本操作資料結構C語言
- 資料結構 - 線性表 - 順序表資料結構
- 【資料結構】順序棧的實現(c++)資料結構C++
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 具體實現程式碼@資料結構探險——順序表資料結構
- 考研資料結構-線性表-順序表資料結構
- 【資料結構】順序佇列的實現(c++)資料結構佇列C++
- 南郵資料結構實驗1.1 順序表的操作資料結構
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 順序表的實現
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- Java實現順序表Java
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 第二週 資料計算實現與順序結構程式設計程式(一)程式設計
- python演算法與資料結構-順序表(37)Python演算法資料結構
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- 資料結構基礎--雜湊表資料結構
- 資料結構 順序棧(c語言)資料結構C語言
- DS順序表--類實現
- 【資料結構】堆排序和模擬實現優先順序佇列!!資料結構排序佇列
- 順序結構
- 基礎夯實:基礎資料結構與演算法(一)資料結構演算法
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 線性表的使用——順序實現
- c語言資料結構,你可能還不知道的順序表C語言資料結構
- 資料結構初階--二叉樹介紹(基本性質+堆實現順序結構)資料結構二叉樹
- 11 線性表的順序儲存結構
- 順序表有序插入資料
- C語言實現順序表C語言
- 線性表之順序儲存結構
- python 資料結構之順序列表的實現Python資料結構