一、資料結構是指資料元素的集合及元素間的相互關係和構造方法, 結構是指元素之間的關係. 在資料結構中,元素之間的相互關係稱為資料的邏輯結構. 按照邏輯關係的不同將資料結構分為 線性結構和非線性結構, 線性結構包括線性表、棧、佇列、串, 非線性結構包括 樹、圖. 資料元素及元素之間關係的儲存形式稱為儲存結構, 可分為順序儲存和鏈式儲存兩種方式.
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語言是不支援動態陣列的,但是我們可以通過指標實現這乙個...