順序棧的簡單操作
關於順序棧的簡單操作如下, 由於主要介紹思想實現,讀者從程式碼中可以很容易看出很多漏洞。如有錯誤之處,請大家指正!
點選(此處)摺疊或開啟
-
#include<iostream>
-
using namespace std;
-
#define MAXSIZE 10
-
-
struct Stack {
-
-
int data[MAXSIZE];
-
int top;
-
};
-
-
Stack *CreateStack(); //該步驟函式宣告必須放在結構體後面
-
void InitialStack(Stack *);
-
void InsertStack(Stack *, int, int);
-
void DeleteStack(Stack *, int);
-
void PrintStack(Stack *);
-
-
Stack *CreateStack() {
-
-
Stack *p = new Stack; //建立指向棧的指標p
-
p->top = -1; //因為是順序棧,儲存資料放在陣列中,為了一致性,top指標置於-1,表明棧為空
-
return p;
-
-
}
-
-
void InitialStack(Stack *p) {
-
-
Stack *head;
-
head = p;
-
-
cout << "入棧的順序是:" << endl;
-
-
int MAX_SIZE = MAXSIZE - 1;
-
-
while (head->top != MAX_SIZE - 1) {
-
-
head->top++; //該步可以省略,下步改為:head->data[++head->top] = head->top;就是賦值與自加的先後順序
-
head->data[head->top] = head->top;
-
cout << head->data[head->top] << "-->";
-
}
-
-
cout << "輸出結束";
-
cout << endl;
-
-
}
-
-
void InsertStack(Stack *p, int i, int x) {
-
-
Stack *q;
-
-
int length = p->top; //這裡一定要注意,棧只能從一端進入彈出,要保證top指標不能夠被修改
-
p->top += 1; //由於插入一個資料,棧長度+1(更準確的說是陣列下標+1)
-
q = p;
-
-
int llength = q->top;
-
int flag = llength;
-
-
for (int n = 0; n <= flag - i; n++) { //一定要保證變與不變,演算法實現,透過圖解讀者可以清楚知道各引數意義
-
-
q->data[llength--] = q->data[length--];
-
}
-
-
q->data[i -1] = x;
-
-
-
}
-
-
void DeleteStack(Stack *p, int i) {
-
-
Stack *q;
-
-
int length = p->top;
-
q = p;
-
-
int l = i;
-
int j = i - 1;
-
-
for (int n = 0; n <= length - l+1; n++) {
-
-
q->data[j++] = q->data[i++]; //刪除操作,對於陣列很簡單就是覆蓋操作
-
}
-
-
p->top = p->top - 1;
-
-
-
}
-
void PrintStack(Stack *p) {
-
-
Stack *q;
-
q = p;
-
-
cout << "出棧的順序是:" << endl;
-
-
while (q->top >=0) {
-
-
cout << q->data[q->top--] << "-->";
-
-
}
-
-
cout << "出棧結束" << endl;
-
}
-
-
int main() {
-
-
Stack *p;
-
-
p = CreateStack();
-
InitialStack(p);
-
-
// InsertStack(p, 5, 11);
-
//PrintStack(p);
-
-
DeleteStack(p, 5);
-
PrintStack(p);
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29876893/viewspace-1814693/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 棧,佇列,優先順序佇列簡單介面使用佇列
- 順序棧————遍歷、出棧、入棧
- 順序棧的實現方式
- 演算法題———————輸入棧的入棧順序和出棧順序判斷是否合理演算法
- c語言順序棧常規插入刪除操作C語言
- java實現棧的簡單操作Java
- 棧1: 順序儲存
- 順序審批流的簡單程式碼實現
- 順序棧與鏈式棧的圖解與實現圖解
- 資料結構:棧的基本概念、順序棧、共享棧以及鏈棧資料結構
- 最簡單的C程式設計--順序程式設計C程式程式設計
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- C++ 順序容器的刪除操作C++
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- C/C++多引數函式引數的計算順序與壓棧順序C++函式
- 利用順序棧完成的作業題(C語言)C語言
- 資料結構 順序棧(c語言)資料結構C語言
- [RDMA] RDMA的不同操作是否保證順序?
- 關於JAVA中順序IO的基本操作Java
- C++ 順序容器大小操作 resizeC++
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 棧是按照順序且連續儲存值
- 關於 i=i++ 問題、入棧順序
- 藍橋杯-外賣店優先順序(簡單寫法)
- 使用者行為分析,指定操作順序
- 推導相等優先順序為何彈出棧頂
- python運算子及優先順序順序Python
- 進行List集合去重操作,分為保持原List集合元素順序和不保持原順序
- SuperObject Delphi 的 JSON 屬性亂序 – 操作類改造 – 關於屬性順序的問題ObjectJSON
- 實驗二:順序表的基本操作實現及其應用
- (MariaDB/MySQL)MyISAM儲存引擎讀、寫操作的優先順序MySql儲存引擎
- 順序表
- 每日一練(31):翻轉單詞順序
- 簡單的演算法-解決頁面指令碼非同步載入順序問題演算法指令碼非同步
- MyBatis 的簡單 CRUD 操作MyBatis
- 第2章 順序表及其順序儲存
- JS棧結構的簡單封裝JS封裝
- 簡單計算器(棧的應用)