欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年02月09日 10:53:03   投稿:lqh  
這篇文章主要介紹了C語(yǔ)言 表、棧和隊(duì)列詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

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

表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è)操作,可以看到,操作中沒(méi)有對(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ì)本站的支持!

相關(guān)文章

  • C語(yǔ)言 結(jié)構(gòu)體和指針詳解及簡(jiǎn)單示例

    C語(yǔ)言 結(jié)構(gòu)體和指針詳解及簡(jiǎn)單示例

    本文主要介紹C語(yǔ)言 結(jié)構(gòu)體和指針,這里整理了相關(guān)資料,并附示例代碼和實(shí)現(xiàn)結(jié)果,以便大家學(xué)習(xí)參考,希望能幫助學(xué)習(xí)C語(yǔ)言的朋友
    2016-08-08
  • Matlab實(shí)現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖

    Matlab實(shí)現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖

    這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)繪制有氣泡感的網(wǎng)絡(luò)圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定的幫助,需要的可以參考一下
    2023-02-02
  • C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹

    C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹

    這篇文章主要介紹了C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • 關(guān)于C++友元類的實(shí)現(xiàn)講解

    關(guān)于C++友元類的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++友元類的實(shí)現(xiàn)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • QT TCP實(shí)現(xiàn)簡(jiǎn)單的通信示例

    QT TCP實(shí)現(xiàn)簡(jiǎn)單的通信示例

    這篇文章主要為大家詳細(xì)介紹了QT TCP簡(jiǎn)單的通信示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 淺談C++變量作用域

    淺談C++變量作用域

    這篇文章主要介紹了C++變量作用域的的相關(guān)資料,文中代碼非常細(xì)致,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 關(guān)于c語(yǔ)言的一個(gè)小bug詳解

    關(guān)于c語(yǔ)言的一個(gè)小bug詳解

    以下是對(duì)c語(yǔ)言中的一個(gè)小bug進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過(guò)來(lái)參考下
    2013-08-08
  • c++截取漢字和英文混合字符串代碼實(shí)例

    c++截取漢字和英文混合字符串代碼實(shí)例

    這篇文章主要介紹了c++截取漢字英文混合字符串,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Qt控件之QLabel用法及技巧

    Qt控件之QLabel用法及技巧

    QLabel是Qt中的一個(gè)控件類,用于顯示文本或圖像的控件類之一,本文主要介紹了Qt控件之QLabel用法及技巧,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 淺談C語(yǔ)言共用體和與結(jié)構(gòu)體的區(qū)別

    淺談C語(yǔ)言共用體和與結(jié)構(gòu)體的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談C語(yǔ)言共用體和與結(jié)構(gòu)體的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論