資料結構與演算法系列(1) 單鏈錶類的實現(C

2021-06-29 10:07:14 字數 2898 閱讀 9258

通過定義乙個c++類封裝單鏈表這種資料結構,

封裝的方法有:

1.通過輸入建立單鏈表;

2.獲取單鏈表的資料元素個數;

3.列印輸出單鏈表中各個元素;

4.搜尋某個元素在單鏈表中的位置;

5.在某個位置之後插入乙個結點;

6.在某個位置刪除乙個節點;

7.單鏈表逆置;

8.單鏈表是否存在回環的判定;

9.單鏈表的公升序排序;

10.兩個單鏈表的公升序合併;

11.兩個單鏈表的降序合併。

注:單鏈表的排序採用的是快速排序的方法。

下面是c++寫的程式**,附執行截圖。

#include #include #include using namespace std;

typedef struct node //結點型別

node;

class linklist//單鏈錶類的定義

node* head;//頭結點指標

int len;//元素個數

public:

void createlist(int n);//根據輸入建立單鏈表

int getlength();//獲取單鏈表的長度(元素個數)

void printlist();//列印單鏈表的各個元素

int searchnode(int data);//查詢某個元素在單鏈表中的位置,不過不存在,返回0。

bool insertnode(int pos,int data);//在pos位置後插入值為data的節點

bool deletenode(int pos);//刪除pos位置後的第乙個元素,刪除成功返回true.

void reverse();//將單鏈表逆置

bool isloop();//判斷單鏈表中是否存在會換,存在返回真,不存在返回false

void selfasorder();//將鍊錶中元素公升序排列

void ascmerge(linklist& l);//與另乙個鍊錶公升序合併

void descmerge(linklist& l);//與l鍊錶降序合併

private:

void quiksort(node* start,node* end); };

void linklist::createlist(int n)//根據輸入建立單鏈表

q=null;

delete q; }

void linklist::printlist()//列印單鏈表的每乙個元素

p=null;

delete p;

coutreturn l;

}int linklist::searchnode(int data)//查詢某個元素在單鏈表中的位置,如果不存在這個元素,返回0

p=p->next;

} return locate;

}bool linklist::insertnode(int pos,int data)//插入節點

else

node* q = new node;

q->data=data;

q->next=p->next;

p->next=q;

p=null;

q=null;

delete p;

delete q;

len++;

return true; }}

bool linklist::deletenode(int pos)

node* q=p->next;

p->next=p->next->next;

delete q;

q=null;

len++;

return true;

}void linklist::reverse()

p=head->next;

q=p->next;

p->next=null;

while(q!=null)

head->next=p;

}bool linklist::isloop()

if(p==q)

return true;

else

return false;

}void linklist::selfasorder()//公升序排列,採用快速排序的方法

void linklist::quiksort(node* start,node*end)

double x=len/2.0;

double xl=floor(x);

double xu=ceil(x);

double halflen=x;

int l=xl;

int u=xu;

node* mid=start;

node* midl=start;

while(u--)

while(l--)

node* s=start;

node* m=mid;

int flag=0;

for(int i=0;idata)>(m->data))

s=s->next;

m=m->next;

} quiksort(start,midl);

quiksort(mid,end);

}void linklist::ascmerge(linklist& l)

else

}position=getlength();

while(q!=null) }

void linklist::descmerge(linklist& l)

int main()

else

cout<<"insert failed!"<>posdel;

if(l.deletenode(posdel))

else

{ cout<<"delete failed!"<

資料結構與演算法系列(1) 單鏈錶類的實現(C

通過定義乙個c 類封裝單鏈表這種資料結構,封裝的方法有 1.通過輸入建立單鏈表 2.獲取單鏈表的資料元素個數 3.列印輸出單鏈表中各個元素 4.搜尋某個元素在單鏈表中的位置 5.在某個位置之後插入乙個結點 6.在某個位置刪除乙個節點 7.單鏈表逆置 8.單鏈表是否存在回環的判定 9.單鏈表的公升序排...

資料結構與演算法系列 排序 1 概述

排序是將一組 無序 的記錄序列調整為 有序 的記錄序列。分內部排序和外部排序。內部排序 若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。衡量內排序的效率是資料的比較次數 外部排序 若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問題為外部排序。衡量外排...

資料結構與演算法系列1 什麼是資料結構和演算法

資料結構是計算機儲存,組織資料的方式,就是怎麼儲存資料的意思 資料 是描述客觀事物的符號,是計算機中可以操作的物件,是能被計算機識別,並給計算機處理的符號集合 資料元素 是組成資料的,有一定意義的基本單位,在計算機中通常作為整體處理,也被稱為記錄 資料項 乙個資料元素可以由若干資料項的組成 資料物件...