1. 程式人生 > >資料結構C/C++程式碼實現 順序表棧基本操作

資料結構C/C++程式碼實現 順序表棧基本操作

順序表棧基本操作的實現  原始碼:

#include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; #define MAXSIZE 100 //#define Status int #define OK 1 #define OVERFLOW -2 #define False 0 #define True 1 #define ERROR 0

typedef int SElemType; typedef int Status; typedef struct {     SElemType *base;  //棧底指標     SElemType *top;   //棧頂指標     int stacksize;        //棧可用最大容量  }SqStack;

//順序棧的初始化 Status InitStack(SqStack &s)  {     s.base=new SElemType[MAXSIZE];        //為順序棧動態分配一個最大容量為MAXSIZE的陣列空間      if(!s.base)   exit(OVERFLOW);        //儲存分配失敗      s.top=s.base;            //top初始為base,空棧      s.stacksize=MAXSIZE;    //stacksize置為棧的最大容量MAXSIZE      return OK; }

//入棧 Status Push(SqStack &s,SElemType e)     //插入元素 e 為新的棧頂元素  {     if(s.top-s.base==s.stacksize)    return ERROR;    //棧滿      *s.top=e;     s.top++;          //也可以直接寫成 *s.top++=e;     return OK; }

//出棧  Status Pop(SqStack &s,SElemType &e)        //刪除 s 的棧頂元素,用 e 返回其值  {     if(s.top==s.base)    return ERROR;     s.top--;     e=*s.top;        //也可以直接寫成 e=*--s.top;     return OK; }

//取棧頂元素  SElemType GetTop(SqStack s)     //返回 S 的棧頂元素,不修改棧頂指標  {     if(s.top != s.base)            //棧非空         return *(s.top-1);         //返回棧頂元素的值,不修改棧頂指標  }

//銷燬棧 Status Destroy(SqStack s) {   free(s.base);   s.base = NULL;   s.top = NULL;   s.stacksize=0;   return OK; }

//遍歷棧 Status StackTraver(SqStack s,Status(*visit)(SElemType))  {    SElemType *b = s.base;//此處不能直接用base或top移動,即不能改變原棧的結構    SElemType *t = s.top;   while(t > b)    visit(*b++);   //cout<<"\n";   return OK;  }   Status visit(SElemType c)  {   cout<<c<<endl;   return OK;  } int main () {     SElemType e;     SqStack s;     InitStack(s) ;     int n;     cout<<"請輸入要進棧的個數:"<<endl;     cin>>n;     while(n--)     {         int m;         cin>>m;         Push(s,m);     }     cout<<"棧中資料為:"<<endl;     StackTraver(s, visit);     Pop(s,e);     cout<<"出棧的元素是:"<<e<<endl;     Destroy(s);     return 0; }