栈的相关操作

来源:互联网 发布:linux locale c 编辑:程序博客网 时间:2024/06/06 05:41
#include<iostream>using namespace std ;#define STACKSIZE 100#define ADDSIZE 10 typedef struct Stack{char *base ;char *top ;int StackSize ;}Stack ;/*初始化栈*/void CreateStack(Stack &s){s.base = (char *)malloc(STACKSIZE * sizeof(char));if(!s.base){cout<<"分配失败"<<endl;exit(1) ;}s.top = s.base ;s.StackSize = STACKSIZE ;return ;}/*插入数据到栈*/void Push(Stack &s , char e){if(s.top - s.base >= STACKSIZE)  //内存不够的时候{s.base = (char *) realloc(s.base ,(s.StackSize + ADDSIZE)*sizeof(char)) ;if(!s.base ){cout<<"分配失败"<<endl;exit(1) ;}s.top = s.base + s.StackSize ;s.StackSize +=ADDSIZE ;}*s.top ++ = e ;}/*输出数据*/void outprint(char e){cout<<e;}/*遍历整个栈*/void TraStack(Stack s){if(s.top == s.base )return ;while(s.top != s.base ){outprint(*(--s.top));}}/*获取栈的栈顶元素*/char GetTop(Stack s, char &e){if(s.top == s.base )return -1;e = *(s.top - 1) ;return e ;}/*删除栈顶元素*/char Pop(Stack &s , char &e){if(s.top == s.base )return e = '0' ;e = *(--s.top ) ;return e ;}int main(void){Stack s ;CreateStack(s);char e ;int i ;for( i = 0 ; i < 10 ; i ++){e = 'A' + i ;Push(s,e);}cout<<"栈的遍历:"<<endl;TraStack(s);cout<<endl;cout<<"获取栈顶元素: " ;GetTop(s,e);cout<<e <<endl ;while(1){cout<<"删除栈顶元素: " ;Pop(s,e);cout<<e <<endl;if(e == '0')break;TraStack(s);cout<<endl ;}return 0;}

原创粉丝点击