顺序结构
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define STACK_SIZE 100
typedef int ElemType;
typedef enum { overflow, underflow, success, fatal}Status;
typedef struct stack{
ElemType *ele;
int stackSize;
int top;
}Stack, *StackPtr;
栈操作
- 初始化 :
时间复杂度: O(1)
Status initStack(StackPtr stack){
Status s = success;
if(stack){
ElemType *tmp = (ElemType*)malloc(sizeof(ElemType)*STACK_SIZE);
if(tmp) {
stack->ele = tmp;
stack-> top = -1;
stack-> stackSize = STACK_SIZE;
} else {
s = fatal;
}
}
return s;
}
- 清空 :
时间复杂度: O(1)
void clearStack(StackPtr stack_ptr) {
if(!isEmpty(stack_ptr)){
stack_ptr->top = -1;
}
}
- 销毁 :
时间复杂度: O(1)
void destroyStack(StackPtr stack_ptr) {
if(stack_ptr) {
if(stack_ptr->ele){
free(stack_ptr->ele);
stack_ptr -> ele = NULL;
}
}
}
- 入栈 :
时间复杂度: O(1)
Status stack_push(StackPtr stack_ptr, ElemType ele){
Status s = success;
if(stack_ptr -> top == STACK_SIZE - 1) {
s = overflow;
} else {
(stack_ptr -> top) ++;
(stack_ptr -> ele)[stack_ptr->top ] = ele;
}
return s;
}
- 出栈 :
时间复杂度: O(1)
Status stack_pop(StackPtr stack_ptr,ElemType *ele){
Status s = success;
if(isEmpty(stack_ptr)){
s = underflow;
}else{
*ele = stack_ptr->ele[stack_ptr -> top];
stack_ptr -> top --;
}
return s;
}
- 取栈顶元素 :
时间复杂度: O(1)
Status stack_top(StackPtr stack_ptr,ElemType *ele){
Status s = success;
if(isEmpty(stack_ptr)){
s = underflow;
}else{
*ele = stack_ptr->ele[stack_ptr -> top];
}
return s;
}
- 判断栈空 :
时间复杂度: O(1)
bool isEmpty(StackPtr stack_ptr){
if(stack_ptr -> top == -1) {
return true;
}
return false;
}
- 获取栈大小 :
时间复杂度: O(1)
int getlength(StackPtr stack_ptr){
if(stack_ptr && stack_ptr -> top != -1) {
return (stack_ptr -> top) + 1;
}
return 0;
}
- 打印栈 :
时间复杂度: O(n)
void printStack(StackPtr stack_ptr){
if(!isEmpty(stack_ptr)) {
printf("+++++++++++++++\n");
for(int i = 0; i <= stack_ptr->top; i++){
printf("stack[%d]:%d\n", i, stack_ptr->ele[i]);
}
printf("+++++++++++++++\n");
}
}