共计 2421 个字符,预计需要花费 7 分钟才能阅读完成。
顺序存储结构 - 栈
//stack.c
#include <stdio.h>
#include <stdlib.h>
// 类型
typedef struct node{
int *data;
int size;
int top;
}stack_tt;
// 创建
stack_tt* create_stack(int size)
{if(size<=0)
return NULL;
stack_tt* stack=malloc(sizeof(stack_tt));
stack->size=size;
stack->top=-1;// 为空
stack->data=malloc(sizeof(int)*size);
return stack;
}
// 判空
int isnull_stack(stack_tt* stack)
{if(stack==NULL)
return 0;
return stack->top==-1;
}
// 判满
int isfull_stack(stack_tt* stack)
{if(stack==NULL)
return 0;
return stack->top==stack->size-1;
}
// 入栈 push
int push_stack(stack_tt* stack,int data)
{
//1
if(stack==NULL||isfull_stack(stack))
return -1;
//2
stack->data[stack->top+1]=data;
//3
stack->top++;
return 0;
}
// 出栈 pop 将数据取出 返回值能返回取出的值么???int pop_stack(stack_tt* stack,int *data)
{if(stack==NULL||isnull_stack(stack))
return -1;
*data=stack->data[stack->top--];
return 0;
}
// 打印(假)int print_stack_notreal(stack_tt* stack)
{if(stack==NULL||isnull_stack(stack))
return -1;
int i;
for(i=stack->top;i>=0;i--)
{printf("%3d",stack->data[i]);
}
printf("\n");
return 0;
}
// 看一眼 view 只能看到栈的顶部元素
int view(stack_tt* stack)
{if(stack==NULL||isnull_stack(stack))
return -1;
printf("%3d",stack->data[stack->top]);
return 0;
}
// 长度
int length_stack(stack_tt* stack)
{if(stack==NULL||isnull_stack(stack))
return 0;
return stack->top+1;
}
// 清空
int clear_stack(stack_tt* stack)
{if(stack==NULL)
return -1;
stack->top=-1;
return 0;
}
// 销毁
int destroy_stack(stack_tt* stack)
{if(stack==NULL)
return -1;
free(stack->data);
free(stack);
return 0;
}
// 打印(真)int print_stack_real(stack_tt* stack)
{if(stack==NULL||isnull_stack(stack))
return -1;
stack_tt* temp=create_stack(length_stack(stack));
int data;
while(!isnull_stack(stack))
{view(stack);
pop_stack(stack,&data);
push_stack(temp,data);
}
printf("\n");
while(!isnull_stack(temp))
{pop_stack(temp,&data);
push_stack(stack,data);
}
destroy_stack(temp);
return 0;
}
// 逆打印(真)int reprint_stack_real(stack_tt* stack)
{if(stack==NULL||isnull_stack(stack))
return -1;
stack_tt* temp=create_stack(length_stack(stack));
int data;
while(!isnull_stack(stack))
{// view(stack);
pop_stack(stack,&data);
push_stack(temp,data);
}
// printf("\n");
while(!isnull_stack(temp))
{view(temp);
pop_stack(temp,&data);
push_stack(stack,data);
}
printf("\n");
destroy_stack(temp);
return 0;
}
int main(int argc, const char *argv[])
{stack_tt* stack=create_stack(20);
int i;
for(i=1;i<=20;i++)
{push_stack(stack,i*3);
print_stack_notreal(stack);
}
reprint_stack_real(stack);
print_stack_real(stack);
print_stack_notreal(stack);
#if 0
int data;
for(i=1;i<=20;i++)
{pop_stack(stack,&data);
printf("pop data:%d\n",data);
print_stack_notreal(stack);
}
#endif
return 0;
}
正文完