VC++2012编程演练数据结构《3》堆栈实现进制转换
生活随笔
收集整理的這篇文章主要介紹了
VC++2012编程演练数据结构《3》堆栈实现进制转换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
棧作為一種數據結構,是一種只能在一端進行插入和刪除操作的特殊線性表。它按照后進先出的原則存儲數據,先進入的數據被壓入棧底,最后的數據在棧頂,需要讀數據的時候從棧頂開始彈出數據(最后一個數據被第一個讀出來)。棧具有記憶作用,對棧的插入與刪除操作中,不需要改變棧底指針。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。
棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!
以上定義是在經典計算機科學中的解釋。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址增大,彈出的操作使得棧頂的地址減小。
棧是允許在同一端進行插入和刪除操作的特殊線性表。允許進行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂浮動;棧中元素個數為零時稱為空棧。插入一般稱為進棧(PUSH),刪除則稱為退棧(POP)。棧也稱為后進先出表。
棧可以用來在函數調用的時候存儲斷點,做遞歸時要用到棧!
以上定義是在經典計算機科學中的解釋。
在計算機系統中,棧則是一個具有以上屬性的動態內存區域。程序可以將數據壓入棧中,也可以將數據從棧頂彈出。在i386機器中,棧頂由稱為esp的寄存器進行定位。壓棧的操作使得棧頂的地址增大,彈出的操作使得棧頂的地址減小。
棧在程序的運行中有著舉足輕重的作用。最重要的是棧保存了一個函數調用時所需要的維護信息,這常常稱之為堆棧幀或者活動記錄。
打開IDE
我們創建一個VC++2012工程來實現堆棧類與應用
頭文件
#if !defined(AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_) #define AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "stdafx.h"//順序棧的類定義stack.h #define ERROR 0 #define EQUAL 1 #define OVERFLOW -1 #define STACKSIZE 100 #define STACKINCREMENT 10class SqStack {private: SElemType *base; SElemType *top; int stacksize; public://構造一個空棧SStatus InitStack(SqStack **S);//棧存在則棧被銷毀Status DestroyStack();//棧存在則清為空棧Status ClearStack();//棧存在則返回true,否則falsebool StackEmpty();// 棧存在則返回棧的元素個數,即棧的長度int StackLength();//棧存在且非空則返回棧的棧頂元素SElemType GetTop();// 棧存在則插入元素e為新的棧頂元素Status Push(SElemType e);// 棧存在且非空則刪除棧的棧頂元素并用e返回其值SElemType Pop(SElemType *e);// 棧的遍歷void StackTraverse(void (*visit)(SElemType *)); };#endif // !defined(AFX_STACK_H__CC48020F_CB24_4299_8D43_0DCB84F1375E__INCLUDED_)實現文件
//#include "stdafx.h" #include "stack.h"// // Construction/Destruction // Status SqStack::InitStack(SqStack **S) { (*S)=(SqStack *) malloc(sizeof(SqStack));(*S)->base=(SElemType *)malloc(STACKSIZE *sizeof(SElemType));if(!(*S)->base) exit(OVERFLOW);(*S)->top=(*S)->base;(*S)->stacksize=0;return 1; }Status SqStack::DestroyStack() {free(base); return 1; }Status SqStack::ClearStack() {stacksize=0;return 1; }bool SqStack::StackEmpty() {if(stacksize==0) return true; else return false; } int SqStack::StackLength() { return stacksize; } SElemType SqStack::GetTop() { if(top==base) {cerr<<"空棧!\n";exit(1);} return *(top-1); } Status SqStack::Push(SElemType e) { *(top++)=e;stacksize++; return 1; } SElemType SqStack::Pop(SElemType *e) { if(top==base) {cerr<<"空棧!\n";exit(1); } *e=*--top; stacksize--; return *e; } void SqStack::StackTraverse(void (*visit)(SElemType *)) {while(top!=base) {stacksize--;visit(--top);}} 我們來實現調用類演習一下#include "stdafx.h" #include "stack.h" using namespace std;void conversion() { SqStack *S; SElemType e; int n; S->InitStack(&S); printf("輸入十進制數:");cin>>n; if(n<0) { printf("\n數必須大于零!\n"); return;} if(!n) S->Push(0); while(n){S->Push(n%8);n=n/8;} printf("結果是:"); while(!S->StackEmpty()){S->Pop(&e);printf("%d",e);} } void main() { printf("運行結果:\n"); conversion(); getch(); }源代碼下載地址如下
http://download.csdn.net/detail/yincheng01/4785289
轉載于:https://www.cnblogs.com/new0801/archive/2012/11/19/6177663.html
總結
以上是生活随笔為你收集整理的VC++2012编程演练数据结构《3》堆栈实现进制转换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: allegro约束设置
- 下一篇: 【原创】jQuery1.8.2源码解析之