关于栈的应用和理解

首先栈是一种用于解决事请发生特定顺序的数据结构。
*解决问题前可先判断是否符合先进后出的规律。
*我们就可以用这种结构来解决这种问题。
典型的例子有:
1.数制的转换——算出的余数最后要按求的相反的顺序写,也就是先来后出。
2.树的非递归遍历——先序(1个栈):首先访问每棵树的根节点,左节点访问完后,开始访问右节点,最先访问的右节点是最后入栈的结点的右节点,最后访问的才是最先入的结点的右节点。有一种先进后出的规律。
中序(1个栈),后序(2个栈)也是同样的思想。
其次再确定栈中是什么数据——datatype。
最基本的操作函数要熟练,包括入栈、出栈,销毁栈等等。因为这些函数是这些数据结构的操作逻辑,大多数都是用c来学习数据结构,所以要熟练各个函数(c以函数为基本模块),熟练后来拼接起新函数。
关于栈中的元素我一开始学的很死,认为这个datatype就只能是一个int 或者是char ,后来意识到入栈还能是树指针类型就很纳闷。

typedef char datatype;
//定义树结构
typedef struct bnode
{
    datatype data;
    struct bnode* lchild,*rchild;
}Bnode,*BTree;
//定义顺序栈
typedef struct{
BTree s[MaxSize];
int top;
}SeqStack,*PSeqStack;

才意识到我对数组的应用也是很肤浅的。认是可以认,自己做的时候想不到。突然感觉打通了脑回路,对于数据结构有了一种新的看法——一种解决现实逻辑问题的方案,在确定好逻辑之后,再选择物理结构。
入栈函数也变成了

int Push_SeqStack(PSeqStack s,BTree p)
{
   if(s->top==MaxSize-1)
   {
       return 0;
   }
   else
   {
   s->top++;
   s->s[s->top]=p;
   return 1;
   }

}

其实这个BTree更应该换成datatype——方便理解和引用修改。

展开阅读全文
©️2020 CSDN 皮肤主题: 1024 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值