栈的基本操作及实现(顺序栈)

顺序存储结构来实现的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针top来指示当前栈顶的位置。
(注意,“&”是c++特有的用来表示引用调用,所以此文件应以.cpp后缀保存)
结构体为:

#define MaxSize 50
typedef int ElemType;

typedef struct{
     
    ElemType data[MaxSize];
    int top;
}SqStack;

基本方法为:

void InitStack(SqStack &s); //初始化
bool StackEmpty(SqStack &s);  //判空
bool Push(SqStack &s, ElemType e); //入栈
bool Pop(SqStack &s, ElemType &e); //出栈
bool GetTop(SqStack s, ElemType &e); //获取栈顶元素

一个测试函数main()如下所示:

int main()
{
     
    int s, i = 0;
    SqStack sqStack;
    InitStack(sqStack);
    
    scanf("%d", &s);
    while(s != 9999)
    {
     
        Push(sqStack, s);
        scanf("%d", &s);
    }
    Pop(sqStack, i);
    GetTop(sqStack, s);
    printf("%d", s);
    
    return 0;
}

运行结果为:
顺序栈的运行结果
完整的源程序为:

#include "stdio.h"
#include "stdlib.h"

#define MaxSize 50
typedef int ElemType;

typedef struct{
     
    ElemType data[MaxSize];
    int top;
}SqStack;

void InitStack(SqStack &s);
bool StackEmpty(SqStack &s);
bool Push(SqStack &s, ElemType e);
bool Pop(SqStack &s, ElemType &e);
bool GetTop(SqStack s, ElemType &e);
bool ClearStack(SqStack &s);

int main()
{
     
    int s, i = 0;
    SqStack sqStack;
    InitStack(sqStack);
    
    scanf("%d", &s);
    while(s != 9999)
    {
     
        Push(sqStack, s);
        scanf("%d", &s);
    }
    Pop(sqStack, i);
    GetTop(sqStack, s);
    printf("%d", s);
    
    return 0;
}

void InitStack(SqStack &s)
{
     
    s.top = -1;
}

bool StackEmpty(SqStack &s)
{
     
    if(s.top == -1)
        return true;
    else
        return false;
}

bool Push(SqStack &s, ElemType e)
{
     
    if(s.top == MaxSize - 1)
        return false;
    s.data[++s.top] = e;
    return true;
}

bool Pop(SqStack &s, ElemType &e)
{
     
    if(s.top == -1)
        return false;
    e = s.data[s.top--];
    return true;
}

bool GetTop(SqStack s, ElemType &e)
{
     
    if(s.top == -1)
        return false;
    e = s.data[s.top];
    return true;
}

你可能感兴趣的:(考研数据结构,顺序栈)