《資料結構與演算法》——表、棧和佇列
線性表:
線性表是最基本和常用的一類資料結構,它表示線性結構。
線上性結構中,資料元素之間存在著一對一的關係,其特點是資料元素之間按某種規定存在一個順序關係。
線性表的兩種儲存結構:順序表和連結串列。
定義: n個同型別資料元素的有限序列,記為:L=(a1,a2,a3…,ai…,an)。其中,n=0時為空表。
資料元素之間的關係: a(i-1)是ai的直接前驅,a(i+1)是ai的直接後繼,除第一個元素外,均有唯一的前驅;除最後一個元素外,均有唯一的後繼。
基本操作: 結構初始化、結構銷燬、引用型、操作型。
初始化和銷燬:
Status List_Init(sq L);
void List_Clear(sq L);
void List_Destroy(sq L);
引用型:
bool List_Empty(sq L);//判斷是否為空
int List_Size(sq L);//求長度
Status List_Retrival(sq L,int pos ElemType *elem);//從線性表pos位置中取出資料放到elem指標中
Status List_Locate(sq L,ElemType elem, int *pos);//線上性表L中定位elem的位置,把位置放到pos指標中
Status List_Prior(sq L,int pos ElemType *elem);//求線性表L中pos位置上資料的直接前驅
Status List_Next(sq L,int pos ElemType *elem);//求線性表L中pos位置上資料的直接後繼
加工型:
Status List_Insert(sq L,int pos,ElemType elem);
Status List_delete(sq L,int pos);
線性表的順序儲存結構: 用一組地址連續的儲存單元,依次存放線性表中的資料元素。
優勢:隨機存取資料。
實現順序儲存:
#define list_init_size 100//定義線性表空間大小
#define list_increament 10//定義空間增量大小
typedef int ElemType;
typedef struct sq{
ElemType *elem;
int length;//線性表長度,初始時為空
int list_size;//線性表空間大小
}sq,*p;
typedef p sq;
建立線性表:
時間複雜度:O(1)
Status list_init(sq L){
Status s=success;
L->list_size=list_init_size;
L->length=0;//初始化線性表長度
L->elem=(ElemType *)malloc(sizeof(ElemType)*L->list_size);
if(L->elem==NULL)//若分配記憶體失敗,返回fatal,嚴重錯誤
s=fatal;
return s;
}
按位置查詢:
時間複雜度:O(1)
Status list_retrival(sq L,int pos,ElemType *elem)
{
Status s=range_error;//初始時查詢失敗
if(L){//線性表存在的情況下
if((pos-1)>=0&&(pos-1)<L->length){
*elem=L->elem[pos-1];//pos-1元素放到elem指標中
s=success;
}
}
else
s=fatal;//若線性表不存在,返回錯誤
return s;
}
按值查詢:
時間複雜度:O(N)
Status list_locate(sq L,ElemType elem,int *pos)
{
Status s=range_error;
if(L){
for(int i=0;i<L->length;++i){//從0到length-1的位置查詢是否有這個值
if(L->elem[i]==elem){
*pos=i+1;//若是,pos+1,跳出迴圈
s=success;
break;
}
}
}
else
s=fatal;
return s;
}
相關文章
- 資料結構與演算法-棧與佇列資料結構演算法佇列
- 資料結構-棧與佇列資料結構佇列
- python資料結構與演算法——棧、佇列與雙端佇列Python資料結構演算法佇列
- 資料結構—棧和佇列資料結構佇列
- 資料結構(棧和佇列)資料結構佇列
- 結構與演算法(02):佇列和棧結構演算法佇列
- Python資料結構與演算法系列四:棧和佇列Python資料結構演算法佇列
- 資料結構與演算法(二)佇列、棧、連結串列資料結構演算法佇列
- 資料結構-佇列、棧資料結構佇列
- C#資料結構與演算法2-C# 棧和佇列C#資料結構演算法佇列
- 資料結構二之棧和佇列資料結構佇列
- 【資料結構】棧(Stack)和佇列(Queue)資料結構佇列
- 三、資料結構演算法-棧、佇列、優先佇列、雙端佇列資料結構演算法佇列
- 資料結構與演算法—稀疏陣列和佇列資料結構演算法陣列佇列
- 資料結構-js實現棧和佇列資料結構JS佇列
- 資料結構與演算法實驗1——線性表的應用之棧與佇列資料結構演算法佇列
- 資料結構與演算法-佇列資料結構演算法佇列
- 資料結構與演算法——佇列(環形佇列)資料結構演算法佇列
- IT名企演算法與資料結構題目最優解--棧和佇列演算法資料結構佇列
- 【資料結構】棧和佇列的總結對比資料結構佇列
- 畫江湖之資料結構【第二話:佇列和棧】佇列資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 佇列資料結構佇列
- 資料結構:特殊的線性表之 棧 & 佇列資料結構佇列
- 學習JavaScript資料結構(一)——棧和佇列JavaScript資料結構佇列
- JavaScript資料結構之陣列棧佇列JavaScript資料結構陣列佇列
- javascript資料結構與演算法-佇列JavaScript資料結構演算法佇列
- 資料結構與演算法分析——佇列資料結構演算法佇列
- 畫江湖之資料結構【第二話:佇列和棧】棧資料結構佇列
- 畫江湖之資料結構 [第二話:佇列和棧] 棧資料結構佇列
- 資料結構和演算法(六)佇列資料結構演算法佇列
- 資料結構基礎學習之(棧和佇列)資料結構佇列
- 大二資料結構學習3(棧和佇列)資料結構佇列
- 線性結構 佇列與棧佇列
- python演算法與資料結構-佇列(44)Python演算法資料結構佇列
- js資料結構與演算法 陣列、棧部分JS資料結構演算法陣列
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 《資料結構與演算法分析-C語言描述》第三章 表、棧和佇列 學習筆記資料結構演算法C語言佇列筆記
- 重學資料結構和演算法(一)之複雜度、陣列、連結串列、棧、佇列、圖資料結構演算法複雜度陣列佇列