栈
- 栈的定义
- 栈实现
- 栈的定义
- 栈的初始化
- 判空(增容)
- 出栈和入栈
- 栈顶元素
- 判空栈
- 看元素个数
- 销毁
栈的定义
一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。
栈的基本操作
压栈:栈的插入操作叫做进栈、压栈、入栈,入栈数据在栈顶。
出栈:栈的删除操作叫做出栈。出栈数据也在栈顶。
所以我们可以用链表,顺序表实现栈,但考虑到栈的结构,我们只有尾删和尾插操作,所以用顺序表实现更为方便。
栈实现
c语言顺序表实现:
栈的定义
typedef int Data;
typedef struct stack{Data* _data;int _size;int _capacity;
}stack;
栈的初始化
void init(stack* stack){if (stack == NULL){return;}stack->_data = NULL;stack->_capacity = stack->_size = 0;
}
判空(增容)
void checkcapacity(stack* stack){if (stack->_capacity==stack->_size){int newcapacity = stack->_capacity == 0 ? 1 : stack->_capacity * 2;stack->_data = (Data*)realloc(stack->_data,sizeof(Data)*newcapacity);stack->_capacity = newcapacity;}
}
出栈和入栈
void push(stack* stack, Data data){if (stack == NULL){return;}checkcapacity(stack);stack->_data[stack->_size] = data;stack->_size++;
}
void pop(stack* stack){if (stack == NULL){return;}if (stack->_size > 0){stack->_size--;}
}
栈顶元素
void stacktop(stack* stack){return stack->_data[stack->_size - 1];
}
判空栈
int empty(stack* stack){if (stack->_size == 0){return 1;}else if (stack = NULL){return 1;}else{return 0;}
}
看元素个数
int size(stack* stack){if (stack == NULL){return 0;}return stack->_size;
}
销毁
void destory(stack* stack)
{if (stack == NULL){printf("非法操作\n");return;}stack->_size = 0;stack->_capicity = 0;free(stack->_data);stack->_data = NULL;}