資料結構與演算法 第02部分 線性表

2021-10-03 10:03:46 字數 2957 閱讀 3343

1:結點定義

typedef struct lnode lnode, *linklist; //linklist為指向結構體lnode的指標型別
2:構造乙個新的結點

bool initlist_l(linklist &lnew,int ndata = 0)//構造乙個新的結點

lnew->data = ndata;

lnew->next = nullptr; //結點的指標域置空

return true;

}

3:前插法建立n個元素的單鏈表(將新結點插入到頭結點之後)

void createlist_h(linklist &lhead,int n)//前插法建立n個元素的單鏈表(將新結點插入到頭結點之後)

}

4:尾插法建立n個元素的單鏈表(將新結點插入到尾結點之後)

void createlist_r(linklist &lhead, int n)//尾插法建立n個元素的單鏈表(將新結點插入到尾結點之後)

}

5:單鏈表的取值(在帶頭結點的單鏈表llink中查詢第nindex個元素,用ndata記錄l中第nindex個資料元素的值)

//單鏈表的取值(在帶頭結點的單鏈表llink中查詢第nindex個元素,用ndata記錄l中第nindex個資料元素的值)

bool getelem_l(linklist llink, int nindex, int &ndata)

linklist p = llink->next;//p指向第乙個結點(去掉頭結點)

int j = 1; //j為計數器

while (j < nindex && nullptr != p) //順鏈域向後掃瞄,直到p指向第i個元素或p為空

if (nullptr == p)//i值不合法i>n(掃到了末尾)

ndata = p->data; //取第i個結點的資料域

return true;

}

6:按值查詢(在帶頭結點的單鏈表llink中查詢值為ndata的元素)

//按值查詢(在帶頭結點的單鏈表llink中查詢值為ndata的元素)

bool locateelem_l(linklist llink, int ndata)

return (nullptr != p); //查詢失敗p為null

}

7:單鏈表的插入(在帶頭結點的單鏈表llink中第nindex個位置插入值為ndata的新結點)

//單鏈表的插入(在帶頭結點的單鏈表llink中第nindex個位置插入值為ndata的新結點)

bool listinsert_l(linklist &llink, int nindex, int ndata)/

linklist p = llink;

int j = 0;

while (nullptr != p && j < nindex - 1) //查詢第nindex-1個結點,p指向該結點

if (nullptr == p)//i>n+1

linklist lnew;

initlist_l(lnew,ndata); //生成新結點

lnew->next = p->next; //將新結點的指標域指向結點ai

p->next = lnew; //將結點p的指標域指向結點s

return true;

}

8:單鏈表的刪除(在帶頭結點的單鏈表llink中,刪除第nindex個位置)

//單鏈表的刪除(在帶頭結點的單鏈表llink中,刪除第nindex個位置)

bool listdelete_l(linklist &llink, int nindex)

linklist p = llink;

int j = 0;

while((nullptr != p->next)&&(j < nindex -1)) //查詢第i-1個結點,p指向該結點

if (nullptr == p->next)//當nindex>n刪除位置不合理

linklist q = p->next; //臨時儲存被刪結點的位址以備釋放空間

p->next = q->next; //改變刪除結點前驅結點的指標域

delete q; //釋放被刪除結點的空間

return true;

}

9:單鏈表的輸出

//單鏈表的輸出

void listprint_l(linklist llink)

cout<10:鍊錶合併

linklist lalink, lblink, lclink;

createlist_r(lalink);//建立鍊錶非遞減lalink

createlist_r(lblink);//建立非遞減鍊錶lblink

initlist_l(lclink);//建立空鍊錶lclink

//鍊錶lalink和鍊錶lblink合併後放入lclink中

void mergelinklist(linklist lalink, linklist lblink, linklist &lclink)

else //把q指向的結點串起來

}lclink->next = p ? p : q;//相當於if(p) r->next=p; else r->next=q;

}delete lalink, lblink, lclink;

11:中間結點

//中間結點

linklist findmiddle(linklist llink)

return q;//返回中間結點指標

}

資料結構與演算法 02線性表 01

一 線性表的定義 線性表 list 由零個或多個資料元素組成的有限序列。這裡強調幾個關鍵的地方 首先它是乙個序列,也就是說元素之間有個先來後到的順序。若元素存在多個,則第乙個元素無前驅,最後乙個元素無後繼,其他元素都有且只有乙個前驅與後繼,另外,線性表強調是有限的。二 抽象資料型別 1.資料型別 指...

資料結構 線性表演算法

1.線性表 線性表是n個具有相同特性的資料元素的有限序列。線性表的主要儲存結構 順序儲存結構 順序表 鏈式儲存結構 鍊錶 2.順序儲存 儲存空間連續,用一組連續的儲存單元依次存放資料元素 即邏輯上相鄰的元素,其物理位置也相鄰。優點 隨機訪問 缺點 插入刪除結點困難 擴充套件不靈活 3.鏈式儲存 儲存...

資料結構與演算法 線性表

概念 一種資料結構,每個結點最多只有乙個前驅結點和乙個後繼結點 類別 順序表 定長 鍊錶 變長 棧 棧頂刪除 彈棧 棧頂插入 壓棧 後進先出 lifo 佇列 隊頭刪除 出隊 隊尾插入 入隊 先進先出 fifo 線性表的抽象資料型別定義 c 1.template2.class list 棧的抽象資料型...