(C語言版)棧和隊列(二)——實現順序存儲棧和順序存儲隊列的相關操作

http://blog.csdn.net/fisherwan/article/details/21479649

?棧和隊列都有兩種實現方式,一種在之前已經寫過了,是鏈式存儲形式,另一種是順序存儲形式。也就是這里所寫的用數組的形式實現,和鏈式存儲形式相比,有幾個不同的地方。

  1. 順序存儲的方式,必須確定棧和隊列的大小,也就是要確定數組的大小。而鏈式儲存是動態分配的,根據需要來增減。
  2. 順序存儲的方式有溢出的現象,由于是數組存儲,所以超出數組下標的時候就溢出了。

? ? ? ? 下面上代碼:

SequentialStack.h 順序存儲棧頭文件

[cpp]?view plain?copy
  1. #ifndef?_SEQUENTIALSTACK_H_H??
  2. #define?_SEQUENTIALSTACK_H_H??
  3. ??
  4. typedef?int?SStackEle;??
  5. const?int?MAXSTACK?=?20;??
  6. ??
  7. typedef?struct?SSTACK??
  8. {??
  9. ????SStackEle?arrele[MAXSTACK];??
  10. ????SStackEle?top;??
  11. }SStack;??
  12. ??
  13. //初始化順序棧??
  14. void?InitSStack(SStack?&s);??
  15. ??
  16. //壓入棧??
  17. void?PushSStack(SStack?&s,?SStackEle?ele);??
  18. ??
  19. //出棧??
  20. void?PopSStack(SStack?&s,?SStackEle?&ele);??
  21. ??
  22. //判斷棧是否為空??
  23. bool?IsemptySStack(SStack?s);??
  24. ??
  25. //得到棧頂元素??
  26. SStackEle?GetTopSStack(SStack?s);??
  27. ??
  28. #endif??
SequentialQueue.h 順序存儲隊列頭文件

[cpp]?view plain?copy
  1. #ifndef?_SEQUENTIALQUEUE_H_H??
  2. #define?_SEQUENTIALQUEUE_H_H??
  3. ??
  4. typedef?int?SQueueEle;??
  5. const?int?MAXQUEUE?=?10;??
  6. ??
  7. typedef?struct?SQUEUE??
  8. {??
  9. ????SQueueEle?arrele[MAXQUEUE];??
  10. ????SQueueEle?front,?rear;??
  11. }SQueue;??
  12. ??
  13. //初始化順序隊列??
  14. void?InitSQueue(SQueue?&q);??
  15. ??
  16. //入隊??
  17. void?EnSQueue(SQueue?&q,?SQueueEle?ele);??
  18. ??
  19. //出隊??
  20. void?DeSQueue(SQueue?&q,?SQueueEle?&ele);??
  21. ??
  22. //判斷隊列是否為空??
  23. bool?IsemptySQueue(SQueue?q);??
  24. ??
  25. //獲得隊頭元素??
  26. SQueueEle?GetFrontSQueue(SQueue?q);??
  27. ??
  28. #endif??

SequentialStack.cpp 順序存儲棧源文件

[cpp]?view plain?copy
  1. #include?"SequentialStack.h"??
  2. #include?<stdio.h>??
  3. ??
  4. //初始化順序棧??
  5. void?InitSStack(SStack?&s)??
  6. {??
  7. ????s.top?=?-1;??
  8. }??
  9. ??
  10. //壓入棧??
  11. void?PushSStack(SStack?&s,?SStackEle?ele)??
  12. {??
  13. ????s.top++;??
  14. ????if?(s.top?<?MAXSTACK)??
  15. ????????s.arrele[s.top]?=?ele;??
  16. ????else??
  17. ????????printf("棧滿,不能進行壓入操作!\n");??
  18. }??
  19. ??
  20. //出棧??
  21. void?PopSStack(SStack?&s,?SStackEle?&ele)??
  22. {??
  23. ????if?(s.top?<?0)??
  24. ????????printf("棧空,不能進行出棧操作!\n");??
  25. ????else??
  26. ????{??
  27. ????????ele?=?s.arrele[s.top];??
  28. ????????s.top--;??
  29. ????}??
  30. }??
  31. ??
  32. //判斷順序棧是否為空??
  33. bool?IsemptySStack(SStack?s)??
  34. {??
  35. ????if?(s.top?=?-1)??
  36. ????????return?true;??
  37. ????else??
  38. ????????return?false;??
  39. }??
  40. ??
  41. //獲得棧頂元素值??
  42. SStackEle?GetTopSStack(SStack?s)??
  43. {??
  44. ????if?(s.top?<?0)??
  45. ????????printf("棧空,不能獲得棧頂元素值!\n");??
  46. ????else??
  47. ????????return?s.arrele[s.top];??
  48. }??

SequentialQueue.cpp 順序存儲隊列源文件

[cpp]?view plain?copy
  1. #include?"SequentialQueue.h"??
  2. #include?<stdio.h>??
  3. ??
  4. //初始化順序隊列??
  5. void?InitSQueue(SQueue?&q)??
  6. {??
  7. ????q.front?=?q.rear?=?-1;??
  8. }??
  9. ??
  10. //入隊列??
  11. void?EnSQueue(SQueue?&q,?SQueueEle?ele)??
  12. {??
  13. ????if?(q.rear?>=?MAXQUEUE)??
  14. ????????printf("隊列滿,不能進行入隊操作!\n");??
  15. ????else??
  16. ????????q.arrele[++q.rear]?=?ele;??
  17. }??
  18. ??
  19. //出隊列??
  20. void?DeSQueue(SQueue?&q,?SQueueEle?&ele)??
  21. {??
  22. ????if?(IsemptySQueue(q))??
  23. ????????printf("隊列空,不能進行出隊操作!\n");??
  24. ????else??
  25. ????????ele?=?q.arrele[++q.front];??
  26. }??
  27. ??
  28. //判斷隊列是否為空??
  29. bool?IsemptySQueue(SQueue?q)??
  30. {??
  31. ????if?(q.front?==?q.rear)??
  32. ????????return?true;??
  33. ????else??
  34. ????????return?false;??
  35. }??
  36. ??
  37. //獲得隊頭元素值??
  38. SQueueEle?GetFrontSQueue(SQueue?q)??
  39. {??
  40. ????if?(IsemptySQueue(q))??
  41. ????????printf("隊空,不能獲得隊頭元素值!\n");??
  42. ????else??
  43. ????????return?q.arrele[q.front?+?1];??
  44. }??

main.cpp 測試程序源文件

[cpp]?view plain?copy
  1. #include?<stdio.h>??
  2. #include?"SequentialStack.h"??
  3. #include?"SequentialQueue.h"??
  4. ??
  5. int?main()??
  6. {??
  7. ????/*順序棧測試代碼*/??
  8. ????int?ele;??
  9. ????SStack?s;??
  10. ????InitSStack(s);??
  11. ??
  12. ????PushSStack(s,?0);??
  13. ????PushSStack(s,?1);??
  14. ????PushSStack(s,?2);??
  15. ??
  16. ????printf("棧頂元素值為:%d\n",?GetTopSStack(s));??
  17. ??
  18. ????PopSStack(s,?ele);??
  19. ????printf("出棧第1個元素是:%d\n",?ele);??
  20. ??
  21. ????printf("棧頂元素值為:%d\n",?GetTopSStack(s));??
  22. ??
  23. ????PopSStack(s,?ele);??
  24. ????printf("出棧第2個元素是:%d\n",?ele);??
  25. ????PopSStack(s,?ele);??
  26. ????printf("出棧第3個元素是:%d\n",?ele);??
  27. ??
  28. ????PopSStack(s,?ele);??
  29. ??
  30. ????if?(IsemptySStack(s))??
  31. ????????printf("棧為空!\n");??
  32. ????putchar('\n');??
  33. ????/*順序隊列測試代碼*/??
  34. ????SQueue?q;??
  35. ????InitSQueue(q);??
  36. ??
  37. ????EnSQueue(q,?0);??
  38. ????EnSQueue(q,?1);??
  39. ????EnSQueue(q,?2);??
  40. ??
  41. ????printf("隊頭元素值為:%d\n",?GetFrontSQueue(q));??
  42. ??
  43. ????DeSQueue(q,?ele);??
  44. ????printf("出隊第1個元素是:%d\n",?ele);??
  45. ??
  46. ????printf("隊頭元素值為:%d\n",?GetFrontSQueue(q));??
  47. ??
  48. ????DeSQueue(q,?ele);??
  49. ????printf("出隊第2個元素是:%d\n",?ele);??
  50. ????DeSQueue(q,?ele);??
  51. ????printf("出隊第3個元素是:%d\n",?ele);??
  52. ??
  53. ????DeSQueue(q,?ele);??
  54. ??
  55. ????if?(IsemptySQueue(q))??
  56. ????????printf("隊列為空!\n");??
  57. ??
  58. ????return?0;??
  59. }??

下面附測試結果圖一張:

PS:個人測試沒有問題,如果大家發現問題請及時聯系,不勝感激!


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/384228.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/384228.shtml
英文地址,請注明出處:http://en.pswp.cn/news/384228.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法學習——貪心篇

貪心選擇是指應用同一規則&#xff0c;將原問題變為一個相似但是規模更小的問題&#xff0c;而后的每一步都是當前看起來最佳的選擇&#xff0c;且這種選擇只依賴于已做出的選擇&#xff0c;不依賴于未作出的選擇。 貪心算法說起來容易&#xff0c;操作起來卻經常有點玄學。&am…

使用基本MVC2模式創建新聞網站

轉載于:https://www.cnblogs.com/lr1402585172/p/10885084.html

棧(Stack),輕松解決數制轉換和括號匹配問題!

http://data.biancheng.net/view/9.html 棧&#xff0c;線性表的一種特殊的存儲結構。與學習過的線性表的不同之處在于棧只能從表的固定一端對數據進行插入和刪除操作&#xff0c;另一端是封死的。 圖1 棧結構示意圖由于棧只有一邊開口存取數據&#xff0c;稱開口的那一端為“…

第一章 TCP/IP協議族

一、協議族體系結構 TCP/IP協議族分為四層協議系統&#xff0c;自底向下分別為數據鏈路層、網絡層、傳輸層、應用層。 數據鏈路層常用ARP&#xff08;地址解析協議&#xff09;和RARP&#xff08;逆地址解析協議&#xff09;。在網絡層使用IP尋址&#xff0c;而在數據鏈路層使用…

二分(三分)+快速冪

之前學習的二分&#xff0c;現在感覺突然理解許多&#xff0c;補一下總結 首先&#xff0c;二分能夠解決什么樣的問題呢&#xff0c;個人認為&#xff0c;二分能夠快速解決已經知道答案范圍&#xff08;線性&#xff09;但是不知道確切答案的問題&#xff0c;例如在一個有序序列…

pthread_cleanup_push與pthread_cleanup_pop的目的 作用

http://blog.csdn.net/slj_win/article/details/7267483 首先你必須知道pthread_cleanup_push與pthread_cleanup_pop的目的(作用)是什么。 比如thread1: 執行 pthread_mutex_lock(&mutex); //一些會阻塞程序運行的調用&#xff0c;比如套接字的accept&#xff0c;等待客…

動態規劃淺談

接觸動態規劃這么久了&#xff0c;簡單談一下自己對動態規劃的理解。 動態規劃名字聽起來好像比比較高大上&#xff0c;可是事實上&#xff0c;人家就是比較高大上。&#xff08;抖個機靈&#xff09; 剛開始接觸動態規劃的時候覺得好可怕&#xff0c;這么復雜的問題我怎么能想…

Linux多線程——使用信號量同步線程

http://blog.csdn.net/ljianhui/article/details/10813469/ 信號量、同步這些名詞在進程間通信時就已經說過&#xff0c;在這里它們的意思是相同的&#xff0c;只不過是同步的對象不同而已。但是下面介紹的信號量的接口是用于線程的信號量&#xff0c;注意不要跟用于進程間通信…

linux下安裝erlang

1.安裝Erlang編譯依賴: yum -y install gcc glibc-devel make ncurses-devel openssl-devel xmlto perl wget 2.下載Erlang&#xff1a; wget http://www.erlang.org/download/otp_src_19.3.tar.gz 3.解壓并安裝 tar -xzvf otp_src_19.3.tar.gz cd otp_src_19.3 ./configure --…

Linux 線程同步的三種方法

http://blog.csdn.net/zsf8701/article/details/7844316 線程的最大特點是資源的共享性&#xff0c;但資源共享中的同步問題是多線程編程的難點。linux下提供了多種方式來處理線程同步&#xff0c;最常用的是互斥鎖、條件變量和信號量。 一、互斥鎖(mutex) 通過鎖機制實現線程…

Elixir特性

iex 退出&#xff1a;Ctrl-C 或Ctrl-G再輸入q 回車。 幫助文檔&#xff1a;h 查看輔函數列表 h IO 查看IO模塊幫助 h IO.puts 查看IO模塊中的puts函數的文檔 編譯和運行&#xff1a;創建一個hello.exs的文件。IO.puts "hello world"    //輸出hello world 使用el…

Elixir基礎

值類型 整數&#xff0c;包括十進制&#xff08;1234&#xff09;、十六進制&#xff08;0xcafe&#xff09;、八進制&#xff08;0o765&#xff09;和二進制&#xff08;0b1010&#xff09; 浮點數 原子&#xff0c;原子是常量&#xff0c;用于表現某些東西的名字&#xff0c;…

C++11新特性之八——函數對象function

http://www.cnblogs.com/yyxt/p/3987717.html 詳細請看《C Primer plus》(第六版中文版) http://www.cnblogs.com/lvpengms/archive/2011/02/21/1960078.html 備注&#xff1a; 函數對象&#xff1a; 盡管函數指針被廣泛用于實現函數回調&#xff0c;但C還提供了一個重要的實現…

分塊思想

今天學習了一個算法&#xff08;這個應該叫做算法吧&#xff1f;&#xff09;叫做分塊&#xff08;和莫隊&#xff0c;但是莫隊還沒有搞懂&#xff0c;搞懂再來寫吧&#xff09; 聽起來很高級&#xff0c;蒟蒻表示瑟瑟發抖。但是學完發現怎么那么像是一種變相的暴力呢。 分塊思…

從零開始學C++之STL(八):函數對象、 函數對象與容器、函數對象與算法

http://blog.csdn.net/jnu_simba/article/details/9500219 一、函數對象 1、函數對象&#xff08;function object&#xff09;也稱為仿函數&#xff08;functor&#xff09; 2、一個行為類似函數的對象&#xff0c;它可以沒有參數&#xff0c;也可以帶有若干參數。 3、任何重載…

樹狀數組初步理解

學習樹狀數組已經兩周了&#xff0c;之前偷懶一直沒有寫&#xff0c;趕緊補上防止自己忘記&#xff08;雖然好像已經忘得差不多了&#xff09;。 作為一種經常處理區間問題的數據結構&#xff0c;它和線段樹、分塊一樣&#xff0c;核心就是將區間分成許多個小區間然后通過對大區…

命名函數

函數體是代碼塊 代碼塊do...end是一種表達式的組織方式。 # ./times.exs下defmodule Times dodef doule(n) don * 2end end 函數調用與模式匹配 代碼如下&#xff1a; # ./factorial.exs    計算階層 defmodule Factorial dodef of(0), do: 1          #終止條件…

STL運用的C++技術(6)——函數對象

http://blog.csdn.net/wuzhekai1985/article/details/6658940?_t_t_t0.20427969420870595 STL是C標準庫的重要組成部分之一&#xff0c;它不僅是一個可復用的組件庫&#xff0c;更是一個包含算法與數據結構的軟件框架&#xff0c;同時也是C泛型編程的很好例子。STL中運用了許多…

列表與遞歸

頭部和尾部 [head | tail ] [1] #head 1 tail [] [head | tail ] [1, 2, 3] #head 1 tail [2, 3] [head | tail ] [] #報錯 創建映射函數 我們可以使用一個函數來處理列表中的各個元素&#xff0c;如此可以接受更加復雜的處理&#xff0c;也可以…

優先隊列小結

不像棧和隊列&#xff0c;雖然STL有較好實現但是我們自己也可以很方便的實現&#xff0c;優先隊列自己實現起來就比較復雜&#xff0c;比較浪費時間&#xff08;而且自己目前也不會233&#xff09;而優先隊列因為其較好的特性經常被使用&#xff0c;因此對它的熟練掌握是做題的…