数据结构--顺序栈

/*
* 构造一个顺序栈(当输入9999时,结束入栈操作),输出栈中元素,显示栈顶元素,删除栈顶元素 
*/
#include <stdio.h>
#include <stack>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define OK 1
#define ERROR 0
typedef int SElemType;
//顺序栈结构体 
struct SqStack
{
    int *base;//指向栈底的指针
    int *top;//指向栈顶元素下一个位置的指针
    int stacksize;//栈的大小
}; 
//1.初始化顺序栈
int InitStrack(SqStack &S){
    S.base = new SElemType[STACK_INIT_SIZE];//为顺序栈动态分配内存 
    if(!S.base){                            //分配失败 
        exit(1);                            //退出程序,参数0表示正常退出,非0表示异常退出 
    }
    S.top = S.base;                         //top初始为base,表示空栈 
    S.stacksize = STACK_INIT_SIZE;          //栈的最大容量 
    return OK;
} 
//2.入栈
int Push(SqStack &S,SElemType e){
    if(S.top - S.base == S.stacksize){      //表示栈满,增加空间 
        int *newbase;                       //指针用于指向新生成的空间位置 
        newbase=new int[S.stacksize*2];     //重新开辟一个空间 
        if(newbase==0) 
            return 0;                       //内存分配失败,返回0 
        for (int i=0;i<=S.stacksize-1;i++)
        {                                   //将原有栈中的元素拷贝到新栈中 
            newbase[i]=S.base[i];
        }       
        delete S.base;                      //删除原有栈的空间 
        S.base=newbase;                     //原有栈的栈底指针指向新栈空间 
        S.top=&S.base[S.stacksize];         //新栈栈顶元素的下一个位置 
        S.stacksize *=2;
    }
    //*S.top++ = e;                         //元素压入栈中,指针S.top加加 
    *S.top=e;
    S.top++;
    return OK; 
} 
//3.出栈
int Pop(SqStack &S){
    if(S.top == S.base){
        printf("空栈!"); 
        return ERROR;
    }
    --S.top;
    return OK; 
} 
//4.取栈顶元素
SElemType GetTop(SqStack S){
    if(S.top != S.base){
        return *(S.top - 1);
    }
    return 00;
}  
//5.打印,输出 
void Print(SqStack S)
{//打印栈中元素,顺序是从栈底到栈顶
    int *p=S.base;
    while (p<S.top)
    {
        printf("%d  ",*p);
        p++;
    }
    printf("\n");
}
//主函数
int main(void){
    SqStack S;
    int x,y;
    InitStrack(S);
    printf("Enter Numbers:\n");
    while(true){
        scanf("%d",&x);
        if(x == 9999){
            break;
        }
        Push(S,x);              //构造顺序栈 
    } 
    printf("The stack elems:");
    Print(S);
    printf("1.入栈:");
    scanf("%d",&x);
    Push(S,x);
    printf("The stack elems:");
    Print(S); 
    y = GetTop(S);
    printf("2.取得栈顶元素:%d\n",y);
    printf("3.出栈:\n");
    Pop(S);
    printf("The stack elems:");
    Print(S);

}
posted @ 2017-06-30 09:26  滕鹏飞  阅读(365)  评论(0编辑  收藏  举报