資料結構中的線性表程式碼實現
define ElemType int
define OK 1
define ERROR 0
include “stdafx.h”
include“iostream” 不能用<>奇怪只能用“”
include“errors.h”不能用<>奇怪只能用“”你們報錯可以在vs用<>
typedef int Statue;
int const LINST_INIT_SIZE = 100;
int const LISTINCREATMENT = 10;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
//初始化連結串列
Statue InitList_Sq(SqList &L)
{
//構造空表L
L.elem = (ElemType )malloc(LINST_INIT_SIZE sizeof(ElemType));
//分配成功判斷
if (!L.elem) exit(OVERFLOW);
//線性表元素初始為0個
L.length = 0;
//儲存當前線性表的記憶體容量
L.listsize = LINST_INIT_SIZE;
return OK;
}
//線性表的插入
Statue ListInsert(SqList &L, int i, ElemType e)
{
//在順序表L中第i個位置插入新元素e
//插入位置判斷
if (i < 1 || i > L.length + 1) return ERROR;
//滿判斷
if (L.length >= L.listsize) perror("OVERFLOW");
//開始騰出待插入位置
for (int i = L.length - 1; i > i - 1; i--)
{
L.elem[i + 1] = L.elem[i];
}
//開始插入元素e
L.elem[i - 1] = e;
//線性表元素增加1
L.length++;
return OK;
}
//線性表的刪除
Statue LinkDelete_Sq(SqList &L, int i, ElemType &e)
{
//刪除位置判斷
if (i < 1 || i > L.length) return ERROR;
//空連結串列判斷
if (L.length == 0) perror("當前連結串列為空,無法刪除資料。");
//開始儲存待刪除位置的元素
e = L.elem[i - 1];
//開始移動刪除元素後面的全部資料
for (int j = i - 1; j < L.length - 1; j++)
{
L.elem[j] = L.elem[j + 1];
}
//開始減少1個元素
L.length--;
return OK;
}
//判斷線性表L是否為空
bool ListEmpty(SqList &L)
{
return L.length == 0;
}
//得到線性表的長度,即線性表中元素的數量
int ListLength(SqList &L)
{
return L.length;
}
//線性單連結串列的節點資料型別定義
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
//初始化線性連結串列
Statue InitList_L(LinkList &L)
{
//建立頭節點
L = (LinkList)malloc(sizeof(LNode));
//開始給頭節點初始化
L->data = -1;
L->next = NULL;
return OK;
}
//線上性連結串列中取第i個資料存放在元素e
//預設單連結串列有頭節點
Statue GetElem_L(LinkList L, int i, ElemType &e)
{
//儲存單連結串列頭指標,防止更改了頭指標裡面的地址,導致其他地方無法使用
LinkList p = L;
int j = 1; //用來記錄節點增加的數目
//開始定位i位置的節點
//開始拿到第一個節點元素地址
p = p->next;
//通過迴圈找到待查詢節點的位置
while (p && j < i) //當p不為空以及沒有跑到所要節點位置就一直迴圈
{
p = p->next;
j++;
}
//開始判斷是不是找到待查節點的位置
//當p = null代表定位的位置超出連結串列節點數量
//首先我們預設i只能取值從1開始表示第一個節點
//得到j > i告訴了我們定位的i取值小於1也就是想找第一個節點之前的
//當然是不存在這種節點
if (!p || j > i)
return ERROR;//沒有找到待查詢的位置
//程式碼進入這裡說明在連結串列中找到了待查位置的節點
//開始儲存需要節點的資料到e中
e = L->data;
return OK;
}
//往帶頭結點單連結串列插入節點e
Statue InsertNode(LinkList L, int i, ElemType &e)
{
//首先定義一個節點型別變數儲存當前連結串列地址
LinkList q = L;
//新建一個節點,用於將e資料存入新節點當中
LinkList p = (LinkList)malloc(sizeof(LNode));
//判斷是不是分配成功
if (!p) exit(OVERFLOW);
//開始寫入資料
p->data = e;
//定義變數用於記錄節點增加數量
int j = 1;
//開始通過迴圈找到待插位置的前一個節點
while (q && j < i - 1)
{
q = q->next;
j++;
}
//判斷是不是找到需要的節點
if (!p || j > i) return ERROR;
//開始將節點p插入連結串列
p->next = q->next;
q->next = p;
return OK;
}
//單連結串列定位元素e的位置
LNode* LocateElem_L(LinkList L, ElemType e)
{
//找到第一個出現值和e相同的節點,並返回其地址,不存在則返回null
//先判當前連結串列是不是為null
LinkList p;
if (!L)
{
return NULL;
}
p = L;
//開始遍歷連結串列查詢節點中資料為e的節點
while (p && p->data != e)
{
p = p->next;
}
return p;
}
//線性表的應用
//比如2個線性表的大小 注意A,B是用的順序儲存連結串列
int Compare(SqList A, SqList B)
{
//如果A < B 返回-1,A = B 返回0 反之返回1
int j = 0; //用於記錄順序連結串列A和B共同部分的索引值
//開始使用迴圈遍歷連結串列節點比較A和B連結串列上的節點大小
while (j < A.length && j < B.length) //保證遍歷完順序表中長度小的連結串列
{
if (A.elem[j] > B.elem[j])
{
return 1; //出現A連結串列中的節點資料大
}
else if(A.elem[j] == B.elem[j]) //如果比較的節點是相等,那麼我們都把索引+1,比較順序表下一個節點資料
{
j++;
}
else //B中節點大
{
return -1;
}
if (A.length == B.length) return 0; //執行上面迴圈出現當前結果表示連結串列長度一樣,並且資料也都相等
if (A.length > B.length) return 1; //表示A連結串列和B連結串列共有部分資料是一樣的,但是A連結串列元素更多
return -1; //這個是B連結串列元素多的情況
}
}
int main()
{
return 0;
}
相關文章
- 資料結構:線性表(Python實現基本操作)資料結構Python
- 資料結構——線性表資料結構
- 資料結構 | 線性表資料結構
- 資料結構-線性表資料結構
- 資料結構—線性表資料結構
- [資料結構] - 線性表資料結構
- 資料結構筆記——線性表(中)資料結構筆記
- Java實現資料結構之線性結構Java資料結構
- 資料結構和演算法(一)線性表實現資料結構演算法
- 資料結構 - 線性表 - 順序表資料結構
- 資料結構-線性表、連結串列資料結構
- 線性表__資料結構筆記資料結構筆記
- 資料結構:線性表-例題資料結構
- 考研資料結構-線性表-順序表資料結構
- 資料結構 - 雜湊表,三探之程式碼實現資料結構
- 資料結構實驗三:線性表綜合實驗資料結構
- 【資料結構】線性表-單連結串列資料結構
- 資料結構筆記——線性表(下)資料結構筆記
- 資料結構——線性表P35.1資料結構
- 資料結構 - 圖之程式碼實現資料結構
- 具體實現程式碼@資料結構探險——順序表資料結構
- 資料結構與演算法 - 線性表資料結構演算法
- 資料結構線性表兩種方式分享資料結構
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 資料結構基礎學習之線性表資料結構
- 資料結構-第一篇:線性表資料結構
- 資料結構與演算法(一):線性表資料結構演算法
- 【資料結構&演算法】04-線性表資料結構演算法
- 資料結構與演算法 | 線性表 —— 順序表資料結構演算法
- 資料結構與演算法 | 線性表 —— 連結串列資料結構演算法
- 資料結構 - 樹,三探之程式碼實現資料結構
- 資料結構實驗之查詢七:線性之雜湊表資料結構
- 【資料結構】串(String、StringBuilder、StringBuffer)的JAVA程式碼實現資料結構UIJava
- 線性表的順序儲存C++程式碼實現C++
- Redis資料結構—跳躍表 skiplist 實現原始碼分析Redis資料結構原始碼
- 前端資料結構--線性結構-連結串列前端資料結構
- 資料結構與演算法-線性表-單連結串列資料結構演算法
- 線性表的結構詳解
- 資料結構線性表的鏈式儲存結構(單連結串列)的表示及其基本操作資料結構