資料結構與演算法一一順序表與單鏈表

2021-08-20 07:38:38 字數 3410 閱讀 4891

一、資料結構是指資料元素的集合及元素間的相互關係和構造方法, 結構是指元素之間的關係. 在資料結構中,元素之間的相互關係稱為資料的邏輯結構. 按照邏輯關係的不同將資料結構分為 線性結構和非線性結構, 線性結構包括線性表、棧、佇列、串, 非線性結構包括 樹、圖. 資料元素及元素之間關係的儲存形式稱為儲存結構, 可分為順序儲存和鏈式儲存兩種方式.

1. 線性結構的特點是資料元素之間一種線性關係, 即資料元素"乙個接乙個的排列", 這種結構主要用於描述具有單一 前驅和後繼 的資料關係.

線性表的儲存方式成為順序儲存和鏈式儲存兩種基本方式. 線性表的順序儲存稱為 順序表, 線性表的鏈式儲存稱為 鍊錶.

順序表:

相關操作:

//-------------------線性表的順序儲存-----------------------

#define maxsize 20

typedef int elemtype;

typedef int status;

typedef struct

sqlist; // 線性表的型別

// ----------獲取線性表中的元素----------

// 返回值為 int型. l為結構體變數(線性表), i為要獲得的元素索引, e為int型的指標變數

status getelem(sqlist l, int i, elemtype *e)

*e = l.data[i-1]; // *e是指標e指向儲存空間的值

return 1;

}// arg1: 結構體指標變數(線性表指標), arg2: 要插入的位置, arg3: 要插入的元素

status listinsert(sqlist *l, int i, elemtype e)

if (i < 1 || i > l->length + 1)

if (i <= l->length)

}// 將新元素插入

l->data[i-1] = e;

l->length++; // 線性表長度+1

return 1;

}// ----------線性表中刪除元素----------

status listdelete(sqlist *l, int i, elemtype *e)

if (i < 1 || i > l->length)

// 返回刪除的元素.(因為陣列元素是從0開始的,因此要-1)

*e = l->data[i-1];

if (i < l->length)

}// 線性表長度-1

l->length--;

return 1;

}

鍊錶

//-------------------線性表的鏈式儲存-----------------------

typedef struct node

node;

typedef struct node *linklist;

// ----------單鏈表的讀取----------

// 初始條件: 順序線性表l已存在. 用e返回l中第i個資料元素的值

// arg1: l是頭指標 arg2: 獲取第i個元素 arg3: e是int型別的指標變數

status getelem1(linklist l, int i, elemtype *e)

if (!p || j > i)

// *e為int型別儲存空間的值

*e = p->data; // 將獲取的結點儲存到*e中返回.

return 1;

}// ----------單鏈表的插入----------

#include /*

linklist l: l為結構體指標,(*l)為結構體變數

linklist *l: l為指向結構體指標的指標. 因此(*l)就是結構體指標,(**l)就是結構體變數了

*/// arg1: 為指向結構體指標的指標 arg2:要插入元素的位置 arg3: int型 變數e

status listinsert1(linklist *l, int i, elemtype e)

if (!p || j > i)

s = (linklist)malloc(sizeof(node)); // 查詢成功, 生成新結點s

s->data = e; //給結點資料域賦值

// 插入操作

s->next = p->next; // p的後繼結點 賦值給 s的後繼結點(之前的p的後繼結點放在s結點之後)

p->next = s; // 將s結點 賦值給 p的後繼結點.

return 1;

}// ----------單鏈表的刪除----------

status listdelete1(linklist *l, int i, elemtype *e)

if (!p || j > i)

// 查詢成功, 將刪除的結點p->next賦值給q

q = p->next;

// 刪除操作

p->next = q->next;

// 將q結點中的資料賦值給e並返回

*e = q->data; // 被刪除結點的資料

free(q); // 釋放該結點的記憶體

return 1;

}

資料結構與演算法 順序表

python中的list和tuple兩種型別採用了順序表的實現技術,具有前面討論的順序表的所有性質。tuple是不可變型別,即不變的順序表,因此不支援改變其內部狀態的任何操作,而其他方面,則與list的性質類似。python標準型別list就是一種元素個數可變的線性表,可以加入和刪除元素,並在各種操...

資料結構與演算法 單 鏈佇列

首先建立單鏈表,和佇列結構,在佇列結構中定義兩個指標變數front rear,分別用來指向佇列的首部和為尾部。判斷佇列是否為空,是否已滿。define maxsize 5 佇列的最大容量 typedef int datatype 佇列中元素型別 typedef struct qnode qnode ...

資料結構與演算法(2)順序表

在之前的順序表中,我們使用陣列來儲存資料元素,但是這樣的結構有很大的隱患。在一些情況下,我們無法事先確定資料元素的規模。如果資料元素很少的話,陣列很多空間是浪費的,如果資料元素比較大的話,陣列可能會出現溢位的危險,這比單純的浪費空間要嚴重的多。c語言是不支援動態陣列的,但是我們可以通過指標實現這乙個...