zoukankan      html  css  js  c++  java
  • C++顺序栈

    SeqStack:

    //顺序栈
    #include<iostream>
    using namespace std;
    typedef int elemType;
    const int MAXSIZE = 50;
    
    struct SqStack
    {
        elemType data[MAXSIZE];
        elemType top;
    };
    
    //初始化栈
    void InitStack(SqStack *S)
    {
        for(int i=0;i<MAXSIZE;i++)
        {
            S->data[i] = 0;
        }
        S->top = -1;
    }
    
    //获取栈的长度
    int LengthStack(SqStack *S)
    {
        int length = 0;
        if(S->top = -1)
            return 0;
        int i = S->top;
        while(i>=0)
        {
            i--;
            length++;
        }
        return length;
    }
    
    //自顶向下遍历栈
    void TraverseStack(SqStack *S)
    {
        if(S->top == -1)
            cout<<"栈为空."<<endl;
        int num = S->top;
        int i = 1;
        while(num>=0)
        {
            cout << i <<":	"<< S->data[num] <<endl;
            i++;
            num--;
        }
    }
    
    //获取栈顶元素
    int GetTop(SqStack *S)
    {
        if(S->top == -1)
        {
            cout <<"栈为空."<<endl;
            return false;
        }
        elemType e = S->data[S->top];
        return e;
    }
    
    //插入元素为e的新的栈顶元素
    bool Push(SqStack *S, elemType e)
    {
        if(S->top == MAXSIZE-1)
        {
            cout<<"栈已满."<<endl;
            return false;
        }
        S->top++;
        S->data[S->top] = e;
        return true;
    }
    
    //删除栈顶元素
    bool Pop(SqStack *S, elemType e)
    {
        if(S->top == -1)
        {
            cout <<"栈为空."<<endl;
            return false;
        }
        e = S->data[S->top];
        S->data[S->top] = 0;
        S->top--;
        return true;
    }
    
    //判断是否为空
    void EmptyStack(SqStack *S)
    {
        if(S->top == -1)
            cout <<"栈为空."<<endl;
        else
            cout<<"栈不为空."<<endl;
    }
    
    //清空栈
    void ClearStack(SqStack *S)
    {
        if(S->top == -1)
            cout <<"栈已为空."<<endl;
        for(int i=S->top;i>=0;i--)
            S->data[i] = 0;
        S->top = -1;
    }
    
    int main()
    {
        SqStack s;
        InitStack(&s);
        for(int i=1;i<7;i++)
            Push(&s,i);
        TraverseStack(&s);
        cout<<endl;
    
        elemType x = GetTop(&s);
        cout<<"栈顶元素为: "<< x <<endl;
        elemType i=0;;
        Pop(&s, i);
        cout<<"删除栈顶元素后栈为:"<<endl;
        TraverseStack(&s);
        cout<<endl;
    
        ClearStack(&s);
        cout<<"清空栈..."<<endl;
        TraverseStack(&s);
        EmptyStack(&s);
        cout<<endl;
    
        return 0;
    }
     1 #include<iostream>
     2 using namespace std;
     3 typedef int ElemType;
     4 #define MAXSIZE 20
     5 
     6 struct SqStack
     7 {
     8     ElemType data[MAXSIZE];
     9     int top;
    10 };
    11 
    12 //初始化栈
    13 void InitStack(SqStack *S)
    14 {
    15     S->top = -1;
    16 }
    17 
    18 //判断是否为空
    19 void IsEmpty(SqStack *S)
    20 {
    21     if(S->top == -1)
    22         cout<<"栈为空!"<<endl;
    23     else
    24         cout<<"栈不为空!"<<endl;
    25 }
    26 
    27 //把s置空
    28 void ClearStack(SqStack *S)
    29 {
    30     S->top = -1;
    31 }
    32 
    33 //栈的长度
    34 int LengthStack(SqStack *S)
    35 {
    36     return S->top+1;
    37 }
    38 
    39 //用e返回S的栈顶元素
    40 void GetTop(SqStack *S, ElemType *e)
    41 {
    42     if(S->top==-1)
    43         cout<<"出错,栈为空!"<<endl;
    44     *e = S->data[S->top];
    45 }
    46 
    47 //插入栈顶元素e
    48 void Push(SqStack *S, ElemType *e)
    49 {
    50     if(S->top == MAXSIZE-1)
    51         cout<<"栈已满!"<<endl;
    52     S->top++;
    53     S->data[S->top] = *e;
    54     //cout<<*e<<endl;
    55 }
    56 
    57 //删除栈顶的元素,用e返回
    58 void Pop(SqStack *S, ElemType *e)
    59 {
    60     if(S->top==-1)
    61         cout<<"栈已空!"<<endl;
    62     *e = S->data[S->top];
    63     S->top--;
    64 }
    65 
    66 //从栈底到栈顶依次显示
    67 void PrintStack(SqStack *S)
    68 {
    69     int i = -1;
    70     while(i<S->top)
    71     {
    72         i++;
    73         cout<<S->data[i]<<" ";
    74     }
    75     cout<<endl;
    76 }
    77 
    78 int main()
    79 {
    80     int e = 0;
    81     SqStack S;
    82     InitStack(&S);
    83     for(int i=1; i<=10; i++)
    84         Push(&S,&i);
    85     cout<<LengthStack(&S)<<endl;
    86     PrintStack(&S);
    87     Pop(&S,&e);
    88     cout<<LengthStack(&S)<<endl;
    89     PrintStack(&S);
    90     cout<<"弹出的栈顶元素为:"<<e<<endl;
    91     GetTop(&S,&e);
    92     cout<<"当前栈顶元素为:"<<e<<endl;
    93     ClearStack(&S);
    94     cout<<LengthStack(&S)<<endl;
    95     IsEmpty(&S);
    96 
    97     return 0;
    98 }
  • 相关阅读:
    c++ 文件读写模板
    sys和system用户的权限区别
    Oracle cmd 命令
    sqldeveloper的安装及其使用教程
    Oracle权限管理详解(2)
    Oracle权限管理详解(1)
    Oracle使用基础
    win7 64位操作系统中 Oracle 11g 安装教程(图解)
    MySQL cmd操作
    Linux下安装tomcat
  • 原文地址:https://www.cnblogs.com/jx-yangbo/p/4857597.html
Copyright © 2011-2022 走看看