顺序栈 C语言

栈是限定仅在表尾进行插入和删除操作的线性表。


栈的抽象数据类型


ADT 栈(stack)
Data
    同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系
Operation
    InitStack(*S):初始化操作,建立一个空栈S
    ClearStack(*S):将栈清空
    StackEmpty(S):若栈为空,返回true,否则返回false
    GetTop(*S,*e):若栈存在且非空,用e返回S的栈顶元素
    Push(*S,e):若栈存在,插入新元素e到栈S中并成为栈顶元素
    Pop(*S,*e):删除栈S中栈顶元素,并用e返回其值
    StackTraverse(*S):遍历栈中所有元素
    StackLength(S):返回栈S的元素个数
endADT

 代码如下:(编译软件VS2017)

#include<stdio.h>

#include<stdlib.h>

#include<io.h>

#include<math.h>

#include<time.h>



#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define MAXSIZE 20 /*存储空间初始分配量*/



typedef int Status;

typedef int SElemType;//SElemType类型根据实际情况而定,这里假设为int



//顺序栈结构

typedef struct

{

        SElemType data[MAXSIZE];

        int top;//用于栈顶指针

}SqStack;



Status visit(SElemType c)

{

        printf("%d", c);

        return OK;

}



//构造一个空栈s

Status InitStack(SqStack *s)

{

        //S.data=(SElem TYpe*)malloc(MAXSIZE*sizeof(SElemType);

        s->top = -1;

        return OK;

}



//把S置为空栈

Status ClearStack(SqStack *s)

{

        s->top = -1;

        return OK;

}



//若栈S为空栈,则返回TRUE,否则返回FALSE

Status StackEmpty(SqStack s)

{

        if (s.top == -1)

               return TRUE;

        else

               return FALSE;

}



//返回s的元素个数,即栈的长度

int StackLength(SqStack S)

{

        return S.top + 1;

}



//若栈不为空,即用e返回S的栈顶元素,并返回OK,否则返回ERROR

Status GetTop(SqStack S, SElemType *e)

{

        if (S.top == -1)

               return ERROR;

        else

        {

               *e=S.data[S.top];

               return OK;

        }

}



//插入元素e为新的栈顶元素

Status Push(SqStack *S, SElemType e)

{

        if (S->top == MAXSIZE - 1)//栈满

               return ERROR;

        S->top++;

        S->data[S->top] = e;

        return OK;

}



//若栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR

Status Pop(SqStack *S, SElemType *e)

{

        if (S->top == -1)

               return ERROR;

        else

        {

               *e = S->data[S->top];

               S->top--;

               return OK;

        }

}



//从栈底到栈顶依次对栈中每个元素显示

Status StackTraverse(SqStack S)

{

        int i=0;

        while (i <= S.top)

        {

               visit(S.data[i++]);

        }

        printf("\n");

        return OK;

}



int main()

{

        int j;

        SqStack s;

        int e;

        if (InitStack(&s) == OK)

               for (j = 1; j <= 10; j++)

                       Push(&s, j);

        printf("栈中元素依次为:");

        StackTraverse(s);

        Pop(&s, &e);

        printf("弹出的栈顶元素 e=%d\n", e);

        GetTop(s, &e);

        printf("栈空否:%d(1.空 0:空)\n", StackEmpty(s));

        ClearStack(&s);

        printf("清空栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(s));

        system("pause");

        return 0;

}

 

结果截图如下:

顺序栈 C语言
在编译的过程中遇到问题:MSB6006“link.exe”已退出,代码为 1561。顺序栈

是因为软件的问题,可以用DirectX修复工具在线修复版,下载地址:https://www.weidown.com/xiazai/1478.html

栈是限定仅在表尾进行插入和删除操作的线性表。