【資料結構實驗二】順序棧的建立、入棧和出棧
阿新 • • 發佈:2019-01-06
版權申明:
實驗二 順序棧的建立、入棧和出棧
實驗目的:
掌握棧的建立、入棧和出棧操作;理解順序棧在入棧和出棧時對Top指標的移動。
實驗內容:
1. 通過結構體宣告線性棧;
2. 在初始化操作中,對棧分配儲存空間,如可容納100個元素;
3. 編寫入棧、出棧、棧空判斷(可選)操作;
4. 編寫函式,利用棧將10進位制的數轉換為8進位制的數;
5. 在主函式中對棧進行測試:
宣告一個新棧,初始化後。
(1)輸入2,4,6,… …,98,100等50個元素,然後退棧輸出所有元素。
(2)將10進位制數5678轉化為8進位制數並輸出。原始碼:
這是資料結構的第二個實驗,主要涉及到了棧的構造構造及應用,注意一下程式碼中註釋的地方,這邊的*S.top++ = e;等於*S.top = e;S.top++;這是Push的關鍵。同時注意一下malloc和realloc的用法。#include "stdafx.h" #include <iostream> using namespace std; #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int SElemType; typedef int Status; typedef struct{ SElemType *base; SElemType *top; int stacksize; }SqStack; Status InitStack(SqStack &S){ S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); if(!S.base) exit(OVERFLOW); S.top = S.base; S.stacksize = STACK_INIT_SIZE; return OK; } Status StackEmpty(SqStack S){ if(S.top == S.base) 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) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; // *S.top = e; // S.top++; return OK; } Status Pop(SqStack &S, SElemType &e){ if(S.top == S.base) return ERROR; e = * --S.top; return OK; } void conversion(){ int j, e; SqStack S; InitStack(S); scanf("%d", &j); while(j){ Push(S, j % 8); j = j / 8; } while(StackEmpty(S) != OK){ Pop(S, e); printf("%d", e); } } int _tmain(int argc, _TCHAR* argv[]) { int i; int e; SqStack S; InitStack(S); for(i = 1; i < 51; i++){ Push(S, i * 2); } cout << "Decimal representation:" << endl; for(i = 0; i < 50; i++){ Pop(S, e); cout << e << " "; if(i % 10 == 9) cout << endl; } cout << endl; cout << "Octal representation:" << endl; conversion(); getchar(); return 0; }
執行結果: