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