讲一下栈的应用 以链表为例,首先定义一下栈:
typedef struct StackArray
{
TYPE* arr;
size_t len;
size_t top;
}StackArray;
这就是最简单的栈定义 然后是各项功能:
StackArray* create_array_stack(size_t len)
{
StackArray* stack = malloc(sizeof(StackArray));
stack->arr = malloc(sizeof(TYPE)*len);
stack->len = len;
stack->top = 0;
return stack;
}
void destroy_array_stack(StackArray* stack)
{
free(stack->arr);
free(stack);
}
bool full_array_stack(StackArray* stack)
{
if(stack->len == stack->top)
return true;
return false;
}
bool push_array_stack(StackArray* stack,TYPE val)
{
if(stack->top >= stack->len)
return false;
stack->arr[stack->top]=val;
stack->top++;
return true;
}
bool empty_array_stack(StackArray* stack)
{
if(stack->top)
return true;
return false;
}
bool pop_array_stack(StackArray* stack)
{
if(stack->top)
stack->top--;
return true;
return false;
}
TYPE top_array_stack(StackArray* stack)
{
int i=0;
while(i<stack->top)
{
printf("%d ",stack->arr[stack->top-1]);
stack->top--;
}
}
比较简单也不多说什么,有建议的话可以留言互相交流一下,毕竟我也还在学数据结构的内容 最后是main函数:
int main(int argc,const char* argv[])
{
StackArray* stack=create_array_stack(20);
for(int i=0;i<15;i++)
{
push_array_stack(stack,i+1);
}
if(full_array_stack(stack))
printf("已满\n");
else
printf("未满\n");
if(empty_array_stack(stack))
printf("有\n");
else
printf("无\n");
printf("%d %d \n",stack->len,stack->top);
pop_array_stack(stack);
top_array_stack(stack);
}
没什么内容稍微改一下就行,数据结构里这个东西初学不是很难 输出的内容是
未满
有
20 15
14 13 12 11 10 9 8 7 6 5 4 3 2 1
没什么东西就解释一下输出内容凑点字数。因为栈定义了20个元素,而输入只有15个所以未满,其中检测是否为空这个函数可以改成从头到尾判断的,然后逐个输出。接下来的结果是输出一下栈长度和赋值的长度,然后把最上面一个出栈,就是把15去掉,然后输出,
|