最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言 表、棧和隊列詳解及實例代碼

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

C語言 表、棧和隊列詳解

表ADT

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

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

  首先定義鏈表的結構:

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; 
} 

  以上是基本的幾個操作,可以看到,操作中沒有對鏈表是否為空進行檢測,在刪除操作中存在隱患。

棧ADT

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

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

  首先,棧的結構定義:

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; 
} 

隊列ADT

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

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

  首先,定義隊列的結構:

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

  隊列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; 
} 

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

相關文章

  • C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應用教程

    C/C++?Qt?數(shù)據(jù)庫QSql增刪改查組件應用教程

    Qt?SQL模塊是Qt中用來操作數(shù)據(jù)庫的類,該類封裝了各種SQL數(shù)據(jù)庫接口,可以很方便的鏈接并使用。本文主要介紹了Qt數(shù)據(jù)庫QSql增刪改查組件的應用教程,感興趣的同學可以學習一下
    2021-12-12
  • 深入學習C++智能指針之shared_ptr與右值引用的方法

    深入學習C++智能指針之shared_ptr與右值引用的方法

    智能指針的核心實現(xiàn)技術是引用計數(shù),每使用它一次,內(nèi)部引用計數(shù)加1,每析構一次內(nèi)部的引用計數(shù)減1,減為0時,刪除所指向的堆內(nèi)存,今天通過本文給大家分享C++智能指針之shared_ptr與右值引用的方法,需要的朋友跟隨小編一起看看吧
    2021-07-07
  • C++ LeetCode1832題解判斷句子是否為全字母句

    C++ LeetCode1832題解判斷句子是否為全字母句

    這篇文章主要為大家介紹了C++ LeetCode1832題解判斷句子是否為全字母句示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • C語言實現(xiàn)用?*?打印X形圖案

    C語言實現(xiàn)用?*?打印X形圖案

    這篇文章主要介紹了C語言實現(xiàn)用?*?打印X形圖案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • VC中CWinThread類以及和createthread API的區(qū)別分析

    VC中CWinThread類以及和createthread API的區(qū)別分析

    這篇文章主要介紹了VC中CWinThread類以及和createthread API的區(qū)別分析,較為詳細的講述了CWinThread類的原理,并以實例形式對AfxBeginThread函數(shù)的內(nèi)部實現(xiàn)進行了解釋說明,需要的朋友可以參考下
    2014-10-10
  • 使用pybind11封裝C++結構體作為參數(shù)的函數(shù)實現(xiàn)步驟

    使用pybind11封裝C++結構體作為參數(shù)的函數(shù)實現(xiàn)步驟

    這篇文章主要介紹了用pybind11封裝C++結構體作為參數(shù)的函數(shù)實現(xiàn)步驟,本文分步驟通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 淺析C++的引用與const指針與各種傳遞方式

    淺析C++的引用與const指針與各種傳遞方式

    這篇文章主要介紹了淺析C++的引用與const指針與各種傳遞方式的相關資料,需要的朋友可以參考下
    2017-08-08
  • C語言單鏈隊列的表示與實現(xiàn)實例詳解

    C語言單鏈隊列的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言單鏈隊列的表示與實現(xiàn),對于研究數(shù)據(jù)結構與算法的朋友來說很有參考借鑒價值,需要的朋友可以參考下
    2014-07-07
  • 深入了解c++數(shù)組與指針

    深入了解c++數(shù)組與指針

    這篇文章主要介紹了c++數(shù)組與指針的相關資料,幫助大家更好的理解和學習c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言詳細講解循環(huán)語句的妙用

    C語言詳細講解循環(huán)語句的妙用

    C語言循環(huán)控制語句是一個基于C語言的編程語句,該語句主要有while循環(huán)語句、do-while循環(huán)語句和for循環(huán)語句來實現(xiàn)循環(huán)結構,在循環(huán)過程中還有關鍵字break、continue、do、break控制中斷繼續(xù)與結束等操作
    2022-04-04

最新評論

新乡县| 庆云县| 方正县| 保定市| 岢岚县| 饶平县| 兴化市| 清河县| 西林县| 林芝县| 三江| 江陵县| 武义县| 洛宁县| 成都市| 凤阳县| 金山区| 江津市| 高要市| 浮山县| 手游| 增城市| 霸州市| 绥滨县| 缙云县| 青川县| 定南县| 金门县| 二连浩特市| 红原县| 融水| 静海县| 江油市| 河津市| 仙桃市| 沂南县| 五家渠市| 三明市| 安徽省| 宝应县| 富锦市|