数据结构--顺序栈的实现(C语言)

时间:2024-03-20 14:59:41

数据结构--顺序栈的实现(C语言)


题目:设从键盘输入一整数的序列:a1,a2,a3,......,an,试编写算法的实现:用栈结构存储输入的整数,当ai不等于-1时,将ai进栈;当ai == -1 时,输出栈顶整数并出栈。算法应对异常情况(入栈满)给出相应的信息。

一栈的表示:

#include <stdlib.h>

#include <stdio.h>

#define MAX 10

typedef int ElemType;

typedef struct Stack{

    ElemType data[MAX];

         int bottom;    //栈底

        int top;       //栈顶

    int length;    //栈的大小

}Stack, *pStack;


二栈的初始化

算法步骤:

1)栈底及栈顶的索引都是0.

2)栈的初始长度为0.

算法描述:

//初始化栈

void init(pStack stack){

    stack->top=stack->bottom=0;

    stack->length = 0;

}


三.压栈

压栈的算法步骤:

1)判断栈的长度是否大于栈的最大容量。

2)栈顶索引上移加1.

3)将栈元素压入到栈中。

4)栈的长度加1.

压栈的算法描述:

//压栈

int push(pStack stack,int num){

         if(stack->length==MAX ){

                   printf("栈满溢出,添加失败.\n");

                   return 0;

         }

    stack->top++;

         stack->data[stack->top]=num;

         stack->length++;

         printf("%d入栈\n",num);

         return 1;

}


压栈的算法分析:

时间复杂度为:T(o) =  1;


四.出栈:

出栈的算法步骤:

1) 判断栈中是否存在元素。

2) 输出栈元素。

3) 栈顶索引下移减1.

4) 栈的长度减1.

出栈的算法描述:

//出栈

int pop(pStack stack){

         if(stack->length<=0){

                   printf("没有可输出的元素\n");

                   return 0;

         }

         printf("%d出栈\n",stack->data[stack->top]);

         stack->length--;

         stack->top--;

         return stack->data[stack->top];

}


出栈的算法分析:

时间复杂度为:T(o) = 1;


Main函数:

int main(){

    ElemType num;

    Stack s;

    init(&s);

         while(1){

        printf("请输入一个栈元素:");

        scanf("%d", &num);

                   if(num == -1){

                            pop(&s);

                            continue;

                   }

                   push(&s, num);

         }

         return 0;

}


执行结果如下:

数据结构--顺序栈的实现(C语言)

数据结构--顺序栈的实现(C语言)






分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正共同进步。