您的位置:首页 > 理论基础 > 数据结构算法

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

2017-10-30 01:24 246 查看
数据结构--顺序栈的实现(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;

}

压栈的算法分析:
<
b791
span style="color:#333333;background:#FFFFFF;">时间复杂度为: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;

}

执行结果如下:





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

 
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: