真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言表、棧和隊(duì)列詳解及實(shí)例代碼

C語(yǔ)言 表、棧和隊(duì)列詳解

創(chuàng)新互聯(lián)公司專注于欽州企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站制作。欽州網(wǎng)站建設(shè)公司,為欽州等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

表ADT

  形如A1,A2,A3…An的表,這個(gè)表的大小為n,而大小為0的表稱為空表,非空表中,Ai+1后繼Ai,Ai-1前驅(qū)Ai,表ADT的相關(guān)操有PrintList打印表中的元素;CreateEmpty創(chuàng)建一個(gè)空表;Find返回關(guān)鍵字首次出現(xiàn)的位置;Insert和Delete從表的某個(gè)位置插入和刪除某個(gè)關(guān)鍵字。

  對(duì)表的所有操作都可以通過(guò)使用數(shù)組來(lái)實(shí)現(xiàn),但在這里使用鏈表的方式來(lái)實(shí)現(xiàn)。鏈表(linked list)由一系列不必在內(nèi)存中相連的結(jié)構(gòu)組成,每個(gè)結(jié)構(gòu)均含有元素和指向包含該元素后繼元的結(jié)構(gòu)的指針。鏈表的結(jié)構(gòu)有很多種,單向鏈表、雙向鏈表、循環(huán)鏈表、有無(wú)表頭的鏈表,這里以有表頭結(jié)點(diǎn)的單向鏈表為例,其余幾種的實(shí)現(xiàn)思路相同。

  首先定義鏈表的結(jié)構(gòu):

struct Node 
{ 
 ElementType Element; 
 Node *Next; 
}; 

  表ADT的主要操作:

Node *CreateEmpty() 
{ 
 Node *header = new Node; 
 Header->Element = 0; 
 Header->Next = NULL; 
 return header; 
} 
void PrintList(Node *List) 
{ 
 Node *p = List->Next; 
 While (p) 
 { 
  std::cout << p->Element << “ “; 
 } 
} 
Node *Find(Node *List, ElementType X) 
{ 
 Node *p = List->Next; 
 while(p && p->Element != X) 
 { 
  p = p->Next; 
 } 
 return p; 
} 
void Insert(Node *List, ElementType X) 
{ 
 Node *p = List; 
 while(p->Next) 
 { 
  p = p->Next; 
 } 
 p->Next = new Node; 
 p = p->Next; 
 p->Next = NULL; 
 p->Element = X; 
} 
void Delete(Node *List, ElementType X) 
{ 
 Node *p = List->Next; 
 Node *d = p->Next; 
 while(d->Element != X) 
 { 
p = p->Next; 
d = p->Next; 
 } 
 p->Next = d->Next; 
 delete d; 
} 

  以上是基本的幾個(gè)操作,可以看到,操作中沒有對(duì)鏈表是否為空進(jìn)行檢測(cè),在刪除操作中存在隱患。

棧ADT

  棧(stack)是限制插入和刪除只能在一個(gè)位置上進(jìn)行的表,該位置是表的末端,叫做棧的頂(top)。對(duì)棧的基本操作有Push(進(jìn)棧)和Pop(出棧),前者相當(dāng)于插入,后者相當(dāng)于刪除最后插入的元素。

  棧的實(shí)現(xiàn)可以是指針,或者使用數(shù)組,數(shù)組的實(shí)現(xiàn)在筆者前面的已經(jīng)介紹過(guò)了,今次使用單鏈表的方式實(shí)現(xiàn)。

  首先,棧的結(jié)構(gòu)定義:

struct Stack 
{ 
 ElementType Element; 
 Stack *Next; 
}; 

  棧ADT的主要操作:

Stack *CreateStack() 
{ 
 Stack *S = new Stack; 
 S->Next = NULL; 
 return S; 
} 
void Push(Stack *S, ElementType X) 
{ 
 Stack *p = new Stack; 
 p->Next = S; 
 S->Element = X; 
 S = p; 
} 
ElementType Pop(Stack *S) 
{ 
 Stack *p = S; 
 if(S->Next) 
 { 
S = S->Next; 
delete p; 
 } 
 return S->Element; 
} 

隊(duì)列ADT

  像棧一樣,隊(duì)列也是一種表,然而,使用隊(duì)列時(shí)插入在一端進(jìn)行而刪除則在另一端進(jìn)行。隊(duì)列的基本操作時(shí)Enqueue(入隊(duì))和Dequeue(出隊(duì)),入隊(duì)是指在表的末端rear插入一個(gè)元素,而出隊(duì)是刪除(或者返回)在表的開頭front的元素。

  如同棧的情形一樣,棧的實(shí)現(xiàn)可以用指針和數(shù)組的方式,數(shù)組的方式筆者同樣在之前做過(guò)介紹,今次使用單鏈表的方式實(shí)現(xiàn)。

  首先,定義隊(duì)列的結(jié)構(gòu):

struct Queue 
{ 
 ElementType Element; 
 Queue *Next; 
}; 

  隊(duì)列ADT的主要操作:

Queue *CreateQueue() 
{ 
 Queue *p = new Queue; 
 p->Next = NULL; 
 return p; 
} 
void Enqueue(Queue *rear, ElementType X) 
{ 
 Queue *p = new Queue; 
 p->Element = X; 
 rear->Next = p; 
 rear = p; 
} 
ElementType Dequeue(Queue *front) 
{ 
 Queue *p = front; 
 ElementType e = front->Element; 
 front = front->Next; 
 delete p; 
 return e; 
} 

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


網(wǎng)頁(yè)名稱:C語(yǔ)言表、棧和隊(duì)列詳解及實(shí)例代碼
標(biāo)題鏈接:http://weahome.cn/article/jhgcjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部