線性表
線性表是最簡單且最常用的一種數據結構。下面將 介紹它的概念、存儲方法和基本運算:
線性表的基本概念:
若至少含有一個結點,則除了起始結點有且僅有一個前趨結點;除了終端結點其他結點有且僅有一個後繼結點。
基本運算:
通過以下一些基本運算來實現一些特定操作,或者實現一些實際問題:
1.初始化InitList,建立一個空表sq
2.求線性表的長度
3.求線性表中第i個元素GetElem(sq,i)
4.按值查找Locate(sq,x)
5.插入元素InsElem(sq,x,i)
6.刪除元素DelElem(sq,i)
7.輸出元素值DispList(sq)
儲存結構:
順序表
特點:邏輯結構中相鄰的結點在存儲結構中仍然相鄰
定義如下:
#define MAXSIZE 100
typedef struct
{
ElemType data[MAXSIZE];//存放數據域
int len;//當前線性表長度
} Sqlist;
優點:用一維數組實現,空間利用率高;能隨機存取
缺點:操作不方便
單鏈表
特點:在結點中使用指針來串聯成線性表,使得邏輯上相鄰的結點,在物理結構上可以不相鄰
定義如下:
typedef struct node
{
ElemType data;//數據域
struct node *next;//指針域,指向下一個相鄰節點
} Slink;
優點:物理結構上靈活,操作方便;查找後繼結點方便
缺點:不可隨機存取;查找前趨結點比較困難
循環單鏈表
特點:與單鏈表相同,只是最後一個結點的指針域不爲空,而是指向頭結點,從而構成一個環
雙鏈表
特點,與單鏈表相比,多了一個前趨指針
定義如下:
typedef struct node
{
ElemType data;//數據域
struct node *prior,*next;//分別指向前趨結點和後繼結點的指針
} Dlink;
優點:保持了單鏈表的優勢之後,又使查找前趨結點變的方便了;
缺點:需要額外的指針域,空間利用率降低;
循環雙鏈表
特點:保持雙鏈表的基礎上,是尾結點與頭結點相連
(待續...)