c语言栈的实现

来源:互联网 发布:湖南电大网络考试平台 编辑:程序博客网 时间:2024/05/01 12:16

栈的定义:栈是一个先入后出表,类似于食堂阿姨放盘子和取盘子的过程。对栈的操作必须放在最新的元素上,即栈顶元素。

用物理线性解构实现栈的操作:

首先定义一个结构体作为栈的控制头

typedef struct SeqStack{int maxRoom;//栈的最大容量USER_TYPE *data;//栈存储空间的首地址int top;//栈顶指针}PSeqStack;
栈的初始化操作:
int creatEmptyStack(PSeqStack **stack, int maxRoom){if(*stack != NULL){printf("栈存在,不能初始化");return FALSE;de}//如果指向结构体PSeqStack的指针不是NULL,则证明不能初始化(*stack) = (PSeqStack*)malloc(sizeof(PSeqStack));//申请控制头的空间(*stack)->maxRoom = maxRoom;//最大元素数量是maxRoom(*stack)->top = -1;//top指向的值是-1(*stack)->data = (USER_TYPE*)malloc(sizeof(USER_TYPE)*maxRoom);//申请数组元素空间return TRUE;}
栈的判空操作
int isEmptyStack(PSeqStack stack){if(stack.top == -1)//空return TRUE;else //非空return FALSE;}
栈的判满操作

int isFullStack(PSeqStack stack)//栈满返回真,否则返回假{printf("stack.maxRoom = %d, stack.top = %d\n", stack.maxRoom, stack.top );if (stack.top == stack.maxRoom-1)//栈为满时候,指针指向最后一个元素的return TRUE;return TRUE;return FALSE;//下标为maxRoom-1}

入栈操作:

int push(PSeqStack *stack, USER_TYPE data){if(isFullStack(*stack))//首先看栈是否已满{printf("栈已满,不能入栈");return FALSE;}stack->top++;//栈顶指针上移stack->data[stack->top] = data;//入栈return TRUE;}
出栈操作:
int pop(PSeqStack *stack, USER_TYPE *data){if(isEmptyStack(*stack) == TRUE){printf("栈空了,读不出来");return FALSE;}*data = stack->data[stack->top];//删除的元素放到data中stack->top--;//栈顶元素下移return TRUE;}

读栈顶元素

int readTop(PSeqStack stack){if(isEmptyStack(stack) == TRUE){printf("栈空了,不能读了\n");return FALSE;}return stack.data[stack.top];}
销毁栈

void destoryStack(PSeqStack **stack){if(*stack != NULL)//指向控制头的指针不等于NULL,即栈存在{if((*stack)->data != NULL){free((*stack)->data);free(*stack);}}}



0 0
原创粉丝点击