日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据结构与算法】栈的基本运算(出栈、入栈、销毁栈等)及源码(顺序栈和链式栈)

發布時間:2023/12/31 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构与算法】栈的基本运算(出栈、入栈、销毁栈等)及源码(顺序栈和链式栈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、順序棧
.h文件

#include <iostream> using namespace std;#define STACKSIZE 100 typedef int DataType;typedef struct {DataType items[STACKSIZE];int top; }SequenceStack;//初始化空順序棧 int InitStack(SequenceStack &S);//判順序棧空 int StackEmpty(SequenceStack &S);//入棧 int Push(SequenceStack &S, DataType item);//出棧 int Pop(SequenceStack &S, DataType &item);//取棧頂 int GetTop(SequenceStack &S, DataType &item);//遍歷棧 void printfStack(SequenceStack &S);

.cpp文件

#include "SequenceStack.h"//初始化空順序棧 int InitStack(SequenceStack &S) {S.top = -1;return 1; }//判順序棧空 int StackEmpty(SequenceStack &S) {if (S.top == -1)return 1;elsereturn 0; }//入棧 int Push(SequenceStack &S, DataType item) {if (S.top >= STACKSIZE - 1){cout << "棧滿" << endl;return 0;}S.top++;S.items[S.top] = item;return 1; }//出棧 int Pop(SequenceStack &S, DataType &item) {if (S.top <= -1){cout << "棧空" << endl;return 1;}item = S.items[S.top];S.top--;return 1; }//取棧頂 int GetTop(SequenceStack &S, DataType &item) {if (S.top <= -1){cout << "棧空" << endl;return 1;}item = S.items[S.top];return 1; }//遍歷棧 void printfStack(SequenceStack &S) {for (int i = 0; i < S.top; i++){cout << S.items[i] << " ";}cout << endl; }

main.cpp測試文件

#include "SequenceStack.h" using namespace std;int main() {DataType result;SequenceStack myStack;InitStack(myStack);for (int i = 0; i < 10; i++)Push(myStack, i + 10);cout << "入棧后,棧里面的元素:" << endl;printfStack(myStack);while (StackEmpty(myStack) != 1)Pop(myStack, result);cout << "出棧后,棧里面的元素:" << endl;printfStack(myStack);system("pause");return 0; }

測試結果:

二、鏈式棧
.h文件

#include <iostream> using namespace std;typedef int DataType; struct LinkNode {DataType data; //數據域struct LinkNode* next; //后繼節點的指針 };//初始化空鏈表 int InitStack(LinkNode* &top);//判鏈棧空 int StackEmpty(LinkNode *top);//入棧 int Push(LinkNode *top, DataType item);//出棧 int Pop(LinkNode *top, DataType &item);//取棧頂元素 int GetTop(LinkNode *top, DataType &item);//釋放鏈棧 void Destroy(LinkNode *&top);//遍歷棧 void printfStack(LinkNode* top);

.cpp文件

#include "LinkStack.h"//初始化空鏈表 int InitStack(LinkNode* &top) {top = new LinkNode;if (top == NULL){cout << "初始化錯誤!" << endl;return 0;}top->next = NULL;return 1; }//判鏈棧空 int StackEmpty(LinkNode *top) {if (top->next == NULL)return 1;elsereturn 0; }//入棧 int Push(LinkNode *top, DataType item) {LinkNode* t = new LinkNode; //生成新的節點if (t == NULL){cout << "內存不足" << endl;return 0;}t->data = item; t->next = top->next;top->next = t;return 1; }//出棧 int Pop(LinkNode *top, DataType &item) {if (top->next == NULL){cout << "棧空" << endl;return 0;}LinkNode* t = top->next;top->next = t->next;item = t->data;delete t;return 1; }//取棧頂元素 int GetTop(LinkNode *top, DataType &item) {if (top->next == NULL){cout << "棧空" << endl;return 1;}item = top->next->data;return 1; }//釋放鏈棧 void Destroy(LinkNode *&top) {LinkNode *p;while (top != NULL){p = top;top = top->next;delete p;} }//遍歷棧 void printfStack(LinkNode* top) {LinkNode* p = top->next;while (p){cout << p->data << " ";p = p->next;}cout << endl; }

main.cpp測試文件

#include "LinkStack.h"int main() {int a;DataType result;LinkNode* myStack;InitStack(myStack);for (int i = 0; i <= 10; i++){Push(myStack, i + 10); //入棧GetTop(myStack, a); //獲取棧頂的元素cout << a << endl; //打印出元素}cout << "遍歷棧:" << endl;printfStack(myStack); //遍歷棧while (StackEmpty(myStack) != 1){Pop(myStack, result); //出棧}cout << "遍歷棧:" << endl;printfStack(myStack); //遍歷棧Destroy(myStack);system("pause");return 0; }

測試結果:

關于棧的基本運算的介紹

總結

以上是生活随笔為你收集整理的【数据结构与算法】栈的基本运算(出栈、入栈、销毁栈等)及源码(顺序栈和链式栈)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。