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 棧的抽象資料型...