知情人士帮忙 对于栈这种数据结构,能通过非常规方法进行随意访问吗
栈是限定仅在表尾进行插入或删除操作的线性表。
顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。
链栈:利用链表实现。
顺序栈的类C语言定义:
typedef struct{
SElemType *base;
SElemType *top; //设栈顶栈底两指针的目的是便于判断栈是否为空
int StackSize; //栈的当前可使用的最大容量.
}SqStack;
对于这种结构的“限定仅在表尾进行插入或删除操作”是我们的安排,也就是大家的约定。
现在讨论我们能不能通过指针s,把指针s指向栈(非空)中,除第一个元素以外的任意元素。
1、将栈中s指向的元素复制给同类型的变量;
2、将栈中s指向的元素上面的元素,逐一向下移动一个位置(和s指向元素,相邻的上一个元素覆盖s指向元素,其他上面元素之一覆盖与之相邻下一元素);
3、将top指针相应的增或减;
通过上面的方法我们就从栈中把先放进去的元素先取出来了。
我就是想知道有没有这种可行性,如果不行那又为什么?
对于汇编中的栈这种方法我认为是可行的,因为cpu根据ss:sp确定堆栈段,我可以采取偷梁换柱的方法将ss赋给ds。把堆栈段当成数据段把先放进的数据取出来,然后再做和上面3步类似的处理,然后将ds返还ss,将sp合理设置。
对于这个问题,我最终只是想弄清楚栈这种数据结构按照后进先出的操作方式是我们的安排,我们人为的约定,它到底存不存在非常规方法(上面的操作只是我认为可能的一种非常规方法)可以不安约定办事!