最近复习数据结构,遇到一道算法题,从尾打印链表,使用的是入栈操作,因为栈属于“先进后出”,正好符合这个题目;借此也把栈复习一下;
1.什么是栈?
答:保存局部变量。栈上的内容旨在函数的范围内存在,当函数运行结束,这些内容也会自动销毁。其特点是效率高,但空间大小有限。
** 栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,称为栈顶,相应地表头端称为栈底,不含元素的空表称为空栈。**
(手残档 不会画图 凑合看,求推荐画图软件!!!!!!!)
2. 栈的表示和实现
顺序栈;即栈的顺序存储结构是利用一组地址连续的存储单元依次存放来自栈底到栈顶的数据元素,同时附设指针
3.代码如下:
定义结构体如下:
/*结构体定义
s_Data 栈中数据
s_Top 指针指向栈顶
s_Bottom 指针指向栈底
s_Next 指针指向上一节点
*/
typedef struct StackStur
{
int s_Data;
struct StackStur* s_Top;
struct StackStur* s_Bottom;
struct StackStur* s_Next;
}NonPointer,*Pointer;
1.创建一个空栈
/*创建一个空栈*/
void CreateStack(Pointer variable)
{
variable->s_Bottom=(Pointer)malloc(sizeof(NonPointer));
if(NULL==variable->s_Bottom) //判断内存是否分配成功
{
printf("Error in allocating memory!\r\n")