鍊錶是一種物理儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是通過鍊錶中的指標鏈結次序實現的。鍊錶由一系列結點(鍊錶中每乙個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包括兩個部分:乙個是儲存資料元素的資料域,另乙個是儲存下乙個結點位址的指標域。 相比於線性表
順序結構,操作複雜。由於不必須按順序儲存,鍊錶在插入的時候可以達到o(1)的複雜度,比另一種線性表順序表快得多,但是查詢乙個節點或者訪問特定編號的節點則需要o(n)的時間,而線性表和順序表相應的時間複雜度分別是o(logn)和o(1)。
/**************linked.h***********************
template
struct node
a data;
node* next;
template
class linklist
public :
linklist();
linklist(a a ,int i);
~linklist();
int length();
a get(int i);
int lacate(a x);
void insert(int i,a x);
a delete(int i);
void printlist();
private:
node* first;
/**************************linked.cpp****************************
template
void linklist::printlist()
p=first->next;
while(p!=null)
coutp=p->next;
}template
int linklist::length()
p=first->next;
count=0;
while(p!=null)
p=p->next;
count++;
return count;
template
a linllist ::get(int i)
p=first->next;
count=1;
while(p!=null&&countp=p->next;
count++;
if(p==null)
throw "位置";
else
return p->data;
template
int linklist::locate(a x)
p=first->next;
count=1;
while (p!=null)
if (p->data==x)
return count;
p=p->next;
count++;
return 0;
template
void listlist< a> ::insert(int i ,a x)
p=first;
count =0;
while (p!=null&&countp=p->next;
count++;
if(p==null)
throw "位置";
else
s=new node;
s->data=x;
s->next=p->next;
p->next=s;
}template
linklist::linklist()
first=new node;
first->next=null;
}template
linklist::linklist(a a,int n)
first=new node;
first->next=null;
for(int i=0;is=new node;
s->data=a[i];
s->next=first->next;
first->next=s;}}
template
a linklist::delete(int i)
p=first;
count=0;
while (p!=null&&countp=p->next;
count++;
if(p==null||p->next==null)
throw"位置";
else
q=p->next;
x=q->data;
p->next=q->next;
delete q;
return x;}}
template
linklist::~linklist
while (first!=null)
q=first;
first=first->next;
delete q;
}樹是由n(n>=1)個有限節點組成乙個具有層次關係的集合。它具有以下的特點:每個節點(node)有零個或多個子節點;沒有父節點的節點稱為根節點;每乙個非根節點有且只有乙個父節點;除了根節點外,每個子節點可以分為多個不相交的子樹;
二叉樹的每個結點至多只有二棵子樹(不存在度大於2的結點),二叉樹的子樹有左右之分,次序不能顛倒。
二叉樹較重要的應用例項是哈夫曼樹和哈夫曼編碼。
二叉排序樹又稱二叉查詢樹,他的左子樹不空,則左子樹上的所有結點的值均小於根結點的值;若他的右子樹不空,則右子樹上的所有結點的值均大於根結點的值;他的左右子樹也都是二叉排序樹。
/*****************************bisorttree.h****************************
class bisorttree
;/**************************bisorttree.cpp********************************
void bisorttree::insertbst(binode*root,binode*s)
if(root==null)
root=s;
else if(s->datadata)
insertbst(root->lchild,s);
else
insertbst(root->rchild,s);
bisorttree::bisorttree(int r,int n)
for(int i=0;is=new binode;
s->data=r[i];
s->lchild=s->rchild=null;
insertbst(root,s);
}void bisorttree::deletebst(binode* p,binode* f)
if(p->lchild==null)&&(p->rchild==null)
f->lchild=null;
delete p;
else if(p->rchild==null)
f->lchild=p->lchild;
delete p;
else if(p->lchild==null)
f->lchild=p->rchild;
delete p;
}else
par=p;
s=p->rchild;
while(s->lchild!=null)
par=s;
s=s->lchild;
p->data=s->data;
if(par==p)
par->rchild=s->rchild;
else
par->lchild=s->rchild;
delete s;}}
binode* bisorttree::searchtbst(binode*root,binode*k)
if(root==null)
return null;
else if(root->data==k)
return root;
else if (root->datareturn searchbst(root->lchild,k);
else
return searchbst(root->rchild,k);
}
演算法與資料結構第一次作業
1.5 連續整數和問題 實驗任務 大部分的正整數可以表示為2 個以上 包含2個 連續正整數之和。例如,6 1 2 3 9 5 4 2 3 4 現在要求計算給定的正整數表示為若干個連續正整數之和的方案個數。資料輸入 輸入資料只有一行,乙個正整數 n 1 n 1000 資料輸出 輸出相應的連續整數分解方...
資料結構第一次實驗
相當於c語言裡的 include include 用cin cout進行輸入輸出時需要用到該標頭檔案 include 用c 裡面現成的排序函式時要用到此標頭檔案 define max 100 using namespace std 用cin cout進行輸入輸出時需要加上此句 typedef str...
第一次作業
1.用較低的成本,開發出滿足客戶需求的軟體,開發的軟體可靠性高,易於維護和移植 2.分為設計階段,開發階段和測試執行階段 1 設計階段 分析客戶需求,明確要解決哪些問題,實現哪些功能,以及確定基本方法 2 開發階段 a.概要設計 畫出流程圖,進行模組化劃分,建立模組的層次結構以及呼叫關係 b.詳細設...