数据结构--顺序栈的实现(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; } |
执行结果如下:
分享(share )是快乐的,也是见证个人的成长历程,文章主要为平时学习积累,基于自身认知不足之处在所难免,也恳请大家指正,共同进步。