入栈初体验
#include <iostream>
#include <cstdlib>
using namespace std;
//注意top指针的移动
const int Stack_Init_Size = 20;
const int StackIncrement = 10;
const int MaxSize = 5;
typedef int ElemType;
typedef struct {
ElemType *top;
ElemType *base;
int stackSize;
}sqStack;
bool InitStack(sqStack *s);
bool Push(sqStack *s);
bool Pop(sqStack *s);
bool ClearStack(sqStack s);
bool DestoryStack(sqStack *s);
bool ShowStack(sqStack s);
int LenStack(sqStack s);
void ShowMenu();
int main()
{
sqStack s;
InitStack(&s);
ShowMenu();
cout << "Intial Done.\n";
int len;
char oops;
while(1){
cout << "Enter a number that you want: ";
cin >> oops;
switch(oops)
{
case '1': Push(&s);
cout << "Push Done.\n"; break;
case '2': Pop(&s);
cout << ";Pop Done.\n"; break;
case '3': ClearStack(s);
cout << "Clear Done.\n"; break;
case '4': DestoryStack(&s);
cout << "Destory Done.\n"; break;
case '5': ShowStack(s);
cout << "This is your Stack.\n"; break;
case '6': len = LenStack(s);
cout << "Your Stack length is: " << len << endl;
break;
default : cout << "Done.\n"; return 0;
}
}
return 0;
}
void ShowMenu()
{
cout.width(20);
cout << "Create a sqStack" << endl;
cout << "Press 1 to Push Stack.\n";
cout << "Press 2 to Pop Stack.\n";
cout << "Press 3 to Clear Stack.\n";
cout << "Press 4 to Destory Stack.\n";
cout << "Press 5 to Show Stack.\n";
cout << "Press 6 to Show Stack Length.\n";
}
bool InitStack(sqStack *s)
{
s->base = (ElemType *)malloc(Stack_Init_Size * sizeof(ElemType));
if(!s->base)
{
cout << "Intital Error.\n";
return false;
}
s->top = s->base;
s->stackSize = Stack_Init_Size;
return true;
}
bool Push(sqStack *s)
{
ElemType item;
cout << "Enter a number to insert: ";
cin >> item;
if(s->top - s->base >= s->stackSize)
{
s->base = (ElemType *)realloc(s->base,(s->stackSize+StackIncrement)*sizeof(ElemType));
if(!s->base)
{
cout << "Increment Error.\n";
return false;
}
}
*(s->top) = item;
s->top++;
return true;
}
bool Pop(sqStack *s)
{
if(s->top == s->base)
{
cout << "It's empty.\n";
return false;
}
cout << *--(s->top) << endl;
return true;
}
bool ClearStack(sqStack s)
{
if(s.top == s.base)
{
cout << "It's empty.\n";
return false;
}
s.top == s.base;
return true;
}
bool DestoryStack(sqStack *s)
{
if(s->top == s->base)
{
cout << "It's empty.\n";
return false;
}
int len;
len = s->stackSize;
for(int i=0; i<len; i++){
delete(s->base);
s->base++;
}
s->base = s->top = NULL;
s->stackSize = 0;
return true;
}
bool ShowStack(sqStack s)
{
if(s.top == s.base)
{
cout << "It's empty.\n";
return false;
}
while(s.top != s.base){
cout << --s.top << ' ';
}
return true;
}
int LenStack(sqStack s)
{
if(s.top == s.base)
{
cout << "It's empty.\n";
return 0;
}
return s.top - s.base;
}
顺序栈初体验——数据结构初学者