數據結構--順序棧

棧:限定僅在表尾進行插入或刪除操作的線性表,對棧來說,表尾端為棧頂,表頭端為棧底。

本文實現了順序棧的表示和相關函數操作,以及一些驗證性代碼。

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define TRUE 1
#define FALSE 0
#define ERROR 0typedef int Status;
typedef int SElemType;typedef struct{SElemType *base;SElemType *top;int stacksize;
}SqStack;Status Init_Stack(SqStack &S){S.base=(SElemType*)malloc(sizeof(SElemType)*STACK_INIT_SIZE);if(!S.base){printf("Merry Error\n");exit(0);}S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;
}Status Clear_Stack(SqStack &S){S.top=S.base;return OK;
}Status Stack_Empty(SqStack S){if(S.top==S.base){return TRUE;}else{return FALSE;}
}int Stack_Length(SqStack S){int length=0;while(S.base!=S.top){S.top--;length++;}return length;
} Status Get_Top(SqStack S,SElemType &e){if(S.base==S.top){return ERROR;}else{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,sizeof(SElemType)*(S.stacksize+STACKINCREMENT));if(!S.base){printf("Merroy Error!\n");exit(0);}}S.stacksize+=STACKINCREMENT;*S.top++=e;return OK;
}Status Pop(SqStack &S,SElemType &e){if(S.base==S.top){return ERROR;}e=*(--S.top);return OK;
}Status Destroy_Stack(SqStack &S){S.top=S.base;free(S.base);return OK;
}int main(){SqStack S;int e;int choice;if(Init_Stack(S)){printf("Init Stack OK!\n");}while(1){printf("選擇要進行的操作:\n");printf("1、壓棧     2、出棧\n");printf("3、取棧頂   4、棧長度\n");printf("5、清空棧   6、銷毀棧\n");scanf("%d",&choice);switch(choice){case 1:printf("要壓棧的數據:");scanf("%d",&e);Push(S,e);break;case 2:if(Pop(S,e)){printf("出棧的數據為:%d\n",e);}else{printf("空棧,出棧失敗!\n");}break;case 3:if(Get_Top(S,e)){printf("棧頂元素為:%d\n",e);}else{printf("空棧,出棧失敗!\n");}break;case 4:printf("棧長度為:%d\n",Stack_Length(S));break;case 5:Clear_Stack(S);break;case 6:Destroy_Stack(S);printf("棧已銷毀!退出程序中\n");Sleep(1000); exit(0);default:break;}}return 0;
} 

歡迎留言交流

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

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

相關文章

Mysql 的一些基本用法

一、增加字段 alter table students add IsImportJcxx int set default 0 COMMENT 是否導入基礎信息平臺 1 是導入; 二、刪除字段 alter table provincestudentinfo drop column NativePlace; 三、創建表 CREATE TABLE 表名 ( IconId int not null auto_increment, 字段名 …

Python 文件的輸入與輸出

1. 文本文件的讀寫主要通過open()所構建的文件對象來實現。我們打開一個文件&#xff0c;并使用一個對象來表示該文件 , f open(d&#xff0c;r) 其中d是文件名&#xff0c;r是模式 "r" 文件只讀,使用 f.write()會報錯 "w" 用于寫入&#xff0c;每次使用f…

查詢表的內容

1&#xff1a;as給表另外命名 2&#xff1a;desc倒序 3&#xff1a;order by分組 4&#xff1a;select*form表名where條件轉載于:https://www.cnblogs.com/chen1101465910/p/3719944.html

人之為生也&#xff0c;凡不破者亦難立之。縱所思之&#xff0c;生而順之者&#xff0c;亦難成也。然吾之路也&#xff0c;亦難行之&#xff0c;至此二十有余&#xff0c;雖無半百之所歷&#xff0c;亦無順途&#xff0c;每及思之&#xff0c;慨之多也。 偶有所感&#xff0c;念…

Delphi 一些函數解釋

AdjustWindowRect 給定一種窗口樣式&#xff0c;計算獲得目標客戶區矩形所需的窗口大小 AnyPopup 判斷屏幕上是否存在任何彈出式窗口 ArrangeIconicWindows 排列一個父窗口的最小化子窗口 AttachThreadInput 連接線程輸入函數 BeginDeferWindowPos 啟動構建一系列新窗口位置的過…

盒子模型的總結

轉載于:https://www.cnblogs.com/zy2012/p/3725677.html

ubuntu node.js Binaries方式安裝(二進制文件安裝)

node.js在windows下有安裝文件&#xff0c;直接一路下一步就可以了&#xff0c;但大家都知道在windows下用node.js總會遇到一些問題&#xff0c;所以就會用到linux。 看到網上幾乎是在linux下編譯安裝node.js。感覺很奇怪&#xff0c;其實官網直接有 node.js linux binaries文…

maven generating project in batch mode hang

現象&#xff1a; 執行 archetype:generate 的時候&#xff0c;會產生[INFO] Generating project in Batch mode原因是&#xff1a;網速問題&#xff0c; 解決方法&#xff1a; 設置maven不要從遠程服務器上獲取catalog&#xff0c;增加參數-DarchetypeCataloginternal 如何在i…

android手機生成pdf格式文件,Android根據pdf模板生成pdf文件

1 public voidFillPdfTemplate(String id) {2 android.icu.text.SimpleDateFormat simpleDateFormat 3 new android.icu.text.SimpleDateFormat("HHmmss");//HH:mm:ss4 //設置默認時區5 simpleDateFormat.setTimeZone(android.icu.util.TimeZone.getTimeZone("G…

棧的應用--數制轉換

十進制N和其他d進制 N(N div d)XdN mod d &#xff08;其中&#xff1a;div為整除運算&#xff0c;mod為求余運算&#xff09; void conversion(){SqStack S;int N;SElemType e;Init_Stack(S);scanf("%d",&N);while(N){Push(S,N%8);NN/8;}while(!Stack_Empty(S…

radio按鈕點擊文字選中按鈕

<input type"radio" name"name" id"rd" value" " /><label for"rd">測試</label> 轉載于:https://www.cnblogs.com/kevin1988/p/3727041.html

tokumx經營報表

#見數據庫列表 show dbs#切換/創建數據庫(當創建一個集合(table)的時候會自己主動創建當前數據庫)use admin;#添加用戶 db.addUser("zhoulf ","123456",true)#更改password&#xff08;為已經存在的用戶更改password&#xff09; db.addUser("zhoulf …

微博 Android 啟動廣告,使用Xposed去除微博國際版的啟動廣告

本文同步更新于旺仔的個人博客&#xff0c;訪問可能有點慢&#xff0c;多刷新幾次。前面有篇文章已經介紹了如何創建Xposed模塊的文章了&#xff0c;這篇就讓我們來實現一個簡單的去除啟動廣告的功能吧。起因為什么要是要去掉微博國際版的開屏廣告呢&#xff0c;因為廣告煩人啊…

鴿巢原理

鴿巢原理&#xff1a; n1個鴿子放入n個窩中&#xff0c;至少有一個窩含有兩只鴿子 Find a multipleTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 5590 Accepted: 2434 Special JudgeDescription The input contains N natural (i.e. positive integer) numbers…

linux命令:vim文件操作命令、新建用戶,查看用戶列表,chown命令

命令 簡單說明 :w 保存編輯后的文件內容&#xff0c;但不退出vim編輯器。這個命令的作用是把內存緩沖區中的數據寫到啟動vim時指定的文件中。 :w! 強制寫文件&#xff0c;即強制覆蓋原有文件。如果原有文件的訪問權限不允許寫入文件&#xff0c;例如&#xff0c;原有的文件…

cocos2d-x android 環境搭配,cocos2d-x?Android環境配置問題和解決方法

1.前提&#xff1a;下載安裝Cygwin,并已經在cygwin\home\admin(計算機用戶名)下的.bash_profile中完成如下配置&#xff1a;NDK_ROOT /cygdrive/d/cocos2dxdev/andrid-ndk-r8e//NDK安裝位置export NDK_ROOT問題&#xff1a;運行cygwin.exe.錄入如下的第一行數據后&#xff0c;沒…

jQuery 1.9 移除了 $.browser 的替代方法

授權方式&#xff1a;署名&#xff0c;非商業用途&#xff0c;保持一致&#xff0c;轉載時請務必以超鏈接(http://www.fwolf.com/blog/post/35)的形式標明文章原始出處和作者信息及本聲明。 jQuery 從 1.9 版開始&#xff0c;移除了 $.browser 和 $.browser.version &#xff0…

基于QTcpSocket和QTcpServer的Tcp通訊以及QDataStream序列化數據

最近要在QT下開發Tcp通訊&#xff0c;發送序列化數據以便于接收。 這里涉及到幾個問題&#xff1a; 1.QTcpSocket、QTcpServer的通訊 2.QDataStream序列化數據 多的不說&#xff0c;直接上干貨&#xff01;&#xff01;&#xff01; 客戶端&#xff1a; tcpclient.h 1 #ifndef …

android mina分析,Android與Mina整合

最近想在自己做的安卓手機應用中加入即時聊天功能&#xff0c;于是想到了用Mina來實現&#xff0c;也是由于自己想著偷懶&#xff0c;借用了官方的example中chat的相關代碼&#xff0c;經過一番改造&#xff0c;很快就能在java環境中正常運行了。確認沒問題后&#xff0c;將cli…

棧的應用--括號匹配的檢驗

算法中設置一個棧&#xff0c;每次讀入一個括號&#xff0c;若是右括號&#xff0c;則或者與置于棧頂的括號匹配&#xff0c;或者是不合法的情況&#xff0c;若是左括號&#xff0c;則入棧。若算法結束&#xff0c;棧是空的&#xff0c;則括號合法。 括號匹配函數 Status bra…