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

C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作

 更新時間:2017年06月28日 08:41:20   投稿:lqh  
這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作的相關(guān)資料,需要的朋友可以參考下

C語言數(shù)據(jù)結(jié)構(gòu)之棧簡單操作

實驗:

編寫一個程序?qū)崿F(xiàn)順序棧的各種基本運算,并在此基礎(chǔ)上設(shè)計一個主程序,完成如下功能:

(1)初始化順序棧
(2)插入元素
(3)刪除棧頂元素
(4)取棧頂元素
(5)遍歷順序棧
(6)置空順序棧

分析:

棧的順序存儲結(jié)構(gòu)簡稱為順序棧,它是運算受限的順序表。

對于順序棧,入棧時,首先判斷棧是否為滿,棧滿的條件為:p->top= =MAXNUM-1,棧滿時,不能入棧; 否則出現(xiàn)空間溢出,引起錯誤,這種現(xiàn)象稱為上溢。

出棧和讀棧頂元素操作,先判棧是否為空,為空時不能操作,否則產(chǎn)生錯誤。通常??兆鳛橐环N控制轉(zhuǎn)移的條件。

注意:

(1)順序棧中元素用向量存放
(2)棧底位置是固定不變的,可設(shè)置在向量兩端的任意一個端點
(3)棧頂位置是隨著進棧和退棧操作而變化的,用一個整型量top(通常稱top為棧頂指針)來指示當(dāng)前棧頂位置

順序棧的實現(xiàn):

#include <stdio.h> 
#include <malloc.h> 
 
typedef int SElemType; 
typedef int Status; 
#define INIT_SIZE 100 
#define STACKINCREMENT 10 
#define Ok 1 
#define Error 0 
#define True 1 
#define False 0 
typedef struct 
{ 
  SElemType *base; 
  SElemType *top; 
  int stacksize; 
}SqStack; 
 
//初始化棧 
Status InitStack(SqStack *s) 
{ 
  s->base = (SElemType *)malloc(INIT_SIZE * sizeof(SElemType)); 
  if(!s->base) 
  { 
    puts("存儲空間分配失敗!"); 
    return Error; 
  } 
  s->top = s->base; 
  s->stacksize = INIT_SIZE; 
  return Ok; 
} 
 
//清空棧 
Status ClearStack(SqStack *s) 
 { 
  s->top = s->base; 
  return Ok; 
 } 
 
//棧是否為空 
Status StackEmpty(SqStack *s) 
 { 
  if(s->top == s->base) 
   return True; 
  else 
   return False; 
 } 
 
//銷毀棧 
Status Destroy(SqStack *s) 
{ 
  free(s->base); 
  s->base = NULL; 
  s->top = NULL; 
  s->stacksize=0; 
  return Ok; 
} 
 
//獲得棧頂元素 
Status GetTop(SqStack *s, SElemType &e) 
{ 
  if(s->top == s->base) return Error; 
  e = *(s->top - 1); 
  return Ok; 
} 
 
//壓棧 
Status Push(SqStack *s, SElemType e) 
{ 
  if(s->top - s->base >= s->stacksize)//棧滿 
  { 
    s->base = (SElemType *)realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(SElemType)); 
    if(!s->base) 
    { 
      puts("存儲空間分配失??!"); 
      return Error; 
    } 
    s->top = s->base + s->stacksize;//修改棧頂位置 
    s->stacksize += STACKINCREMENT;//修改棧長度 
 
  } 
  *s->top++ = e; 
  return Ok; 
} 
 
//彈棧 
Status Pop(SqStack *s, SElemType *e) 
{ 
  if(s->top == s->base) return Error; 
  --s->top; 
  *e = *(s->top); 
  return Ok; 
} 
 
//遍歷棧 
Status StackTraverse(SqStack *s,Status(*visit)(SElemType)) 
 { 
   SElemType *b = s->base;//此處不能直接用base或top移動,即不能改變原棧的結(jié)構(gòu) 
   SElemType *t = s->top; 
  while(t > b) 
   visit(*b++); 
  printf("\n"); 
  return Ok; 
 } 
 
Status visit(SElemType c) 
 { 
  printf("%d ",c); 
  return Ok; 
 } 

測試代碼:

int main() 
{ 
  SqStack a; 
  SqStack *s = &a; 
  SElemType e; 
  InitStack(s); 
  int n; 
  puts("請輸入要進棧的個數(shù):"); 
  scanf("%d", &n); 
  while(n--) 
  { 
    int m; 
    scanf("%d", &m); 
    Push(s, m); 
  } 
  StackTraverse(s, visit); 
  puts(""); 
  puts("8進棧后:"); 
  Push(s, 8); 
  StackTraverse(s, visit); 
  puts(""); 
  Pop(s, &e); 
  printf("出棧的元素是:%d\n", e); 
  printf("元素出棧后事實上并沒有清除,依然存在于內(nèi)存空間,所謂的出棧只是指針移動,出棧的元素是%d\n", *s->top);//判斷出棧后元素是否還存在于內(nèi)存中 
  Destroy(s); 
  return 0; 
} 

運行結(jié)果:

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

相關(guān)文章

  • C++實現(xiàn)高性能轉(zhuǎn)換大小寫算法示例

    C++實現(xiàn)高性能轉(zhuǎn)換大小寫算法示例

    大小寫轉(zhuǎn)換是我們作為一名程序員經(jīng)常會遇到,也必須要會的一個功能,下面這篇文章主要給大家介紹了關(guān)于C++實現(xiàn)高性能轉(zhuǎn)換大小寫算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2018-01-01
  • 如何實現(xiàn)一定概率選中某一個字母

    如何實現(xiàn)一定概率選中某一個字母

    本篇文章是對如何實現(xiàn)一定概率選中某一個字母的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Visual Studio調(diào)試C/C++教程指南

    Visual Studio調(diào)試C/C++教程指南

    VisualStudio是微軟開發(fā)的一款集成開發(fā)環(huán)境軟件,本文主要介紹了Visual Studio調(diào)試C/C++教程指南,熟悉地掌握基于VS的C/C++調(diào)試技術(shù),可以大幅提升調(diào)試性能,感興趣的可以了解一下
    2024-06-06
  • c++中冒號(:)和雙冒號(::)的使用說明

    c++中冒號(:)和雙冒號(::)的使用說明

    以下是對c++中冒號和雙冒號的用法進行了介紹,需要的朋友可以過來參考下
    2013-07-07
  • 基于Qt的TCP實現(xiàn)通信

    基于Qt的TCP實現(xiàn)通信

    這篇文章主要為大家詳細介紹了基于Qt的TCP實現(xiàn)通信,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++基于棧的深搜算法實現(xiàn)馬踏棋盤

    C++基于棧的深搜算法實現(xiàn)馬踏棋盤

    這篇文章主要為大家詳細介紹了C++基于棧的深搜算法實現(xiàn)馬踏棋盤,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C++中的STL中map用法詳解(零基礎(chǔ)入門)

    C++中的STL中map用法詳解(零基礎(chǔ)入門)

    map在編程中是經(jīng)常使用的一個容器,本文來講解一下STL中的map,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 基于Qt Qml實現(xiàn)時間軸組件

    基于Qt Qml實現(xiàn)時間軸組件

    時間軸組件是現(xiàn)代用戶界面中常見的元素,用于按時間順序展示事件,本文主要為大家詳細介紹了如何使用Qml實現(xiàn)一個簡單的時間軸組件,需要的可以參考下
    2025-01-01
  • VS2022 無法打開源文件“stdio.h”問題解決

    VS2022 無法打開源文件“stdio.h”問題解決

    本文主要介紹了VS2022 無法打開源文件“stdio.h”問題解決,文中通過圖文的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C++實例分析組合數(shù)的計算與排列組合的產(chǎn)生

    C++實例分析組合數(shù)的計算與排列組合的產(chǎn)生

    這篇文章主要介紹了C++組合數(shù)的計算與排列和組合無重集元素的產(chǎn)生,對計算算法感興趣的同學(xué),可以參考一下,理解其原理,并且試驗一下。
    2022-07-07

最新評論

高要市| 龙陵县| 岳西县| 绥阳县| 奇台县| 深圳市| 平泉县| 凤城市| 浙江省| 平潭县| 乌兰县| 祁门县| 沈丘县| 阿克| 巴林左旗| 黑龙江省| 甘洛县| 会同县| 云龙县| 青河县| 革吉县| 衡水市| 中宁县| 江北区| 社旗县| 黎川县| 西城区| 荃湾区| 潼关县| 揭东县| 鄂州市| 兴国县| 芜湖县| 扶风县| 江永县| 定西市| 桑植县| 大丰市| 大化| 翁源县| 台中市|