c语言栈的实现
2016-12-21 21:39
344 查看
栈的定义:栈是一个先入后出表,类似于食堂阿姨放盘子和取盘子的过程。对栈的操作必须放在最新的元素上,即栈顶元素。
用物理线性解构实现栈的操作:
首先定义一个结构体作为栈的控制头typedef struct SeqStack{
int maxRoom;//栈的最大容量
USER_TYPE *data;//栈存储空间的首地址
int top;//栈顶指针
}PSeqStack;栈的初始化操作:
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 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);
}
}
}
用物理线性解构实现栈的操作:
首先定义一个结构体作为栈的控制头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);
}
}
}