C语言数组实现栈的基本操作,并利用O(1)求出栈中最小元素

来源:互联网 发布:数据库存储过程作用 编辑:程序博客网 时间:2024/05/29 07:29
#include <stdio.h>#include <stdlib.h>#include <string.h> #define MAX_STACK_SIZE 80typedef struct{unsigned int stack[MAX_STACK_SIZE];int top; //top 默认值是-1,所以应该是int型unsigned int down_min[MAX_STACK_SIZE]; //储存栈中各个元素到栈底元素中的最小值,eg 栈[5,2,3,4,8,1] 5为栈底,则down_min为[5,2,2,2,2,1]}sequence_stack;/*初始化栈*/sequence_stack* initialize_seqstack() {sequence_stack* seqstack = NULL;seqstack = (sequence_stack*)malloc(sizeof(sequence_stack));memset(seqstack,0,sizeof(sequence_stack));seqstack->top = -1;return seqstack;}/*销毁栈*/void destroy_seqstack(sequence_stack* seqstack){if(seqstack != NULL){free(seqstack);}return;}/*入栈*/unsigned int push_seqstack(sequence_stack *seqstack, unsigned int value){if(seqstack != NULL){if(seqstack->top == MAX_STACK_SIZE-1){printf("stack is full\n");return -1;}else{seqstack->stack[++seqstack->top] = value;if(seqstack->top == 0){seqstack->down_min[seqstack->top] = value;}else{if(value < seqstack->down_min[seqstack->top-1]){seqstack->down_min[seqstack->top] = value;}else{seqstack->down_min[seqstack->top] = seqstack->down_min[seqstack->top-1];}}return 0;}}return -1;}/*出栈*/unsigned int pop_seqstack(sequence_stack *seqstack){if(seqstack != NULL){if(seqstack->top == -1){printf("stack is empty\n");return -1;}else{return seqstack->stack[seqstack->top--];}}}/*打印栈元素*/void print_seqstack(sequence_stack *seqstack){if(seqstack != NULL){int i = 0; printf("stack from end to top :\n");for(i=0;i<=(seqstack->top);i++){printf("%d,",seqstack->stack[i]);}printf("\n");}}/*打印最小数组元素*/void print_seqstack_min_array(sequence_stack *seqstack){if(seqstack != NULL){int i = 0;printf("down_min from end to top :\n");for(i=0;i<=(seqstack->top);i++){printf("%d,",seqstack->down_min[i]);}printf("\n");}}/*打印当前栈的最小值*/void printf_minvalue(sequence_stack *seqstack){if(seqstack != NULL){printf("min value is %d\n",seqstack->down_min[seqstack->top]);}return ;}void main(){    sequence_stack *seqstack = initialize_seqstack();push_seqstack(seqstack,5);push_seqstack(seqstack,13);push_seqstack(seqstack,6);pop_seqstack(seqstack);pop_seqstack(seqstack);pop_seqstack(seqstack);push_seqstack(seqstack,2);push_seqstack(seqstack,33);push_seqstack(seqstack,7);print_seqstack(seqstack);print_seqstack_min_array(seqstack);        destroy_seqstack(seqstack);}

原创粉丝点击