在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
栈的构成及初始化 对于“先进后出”的顺序栈,需要控制3个量:栈元素,栈顶指针,栈容量。 栈容量即栈的最大容量,若超过会产生溢出错误。当然,必要时也可以扩充容量。 栈元素可以通过动态数组( base[] )存放。初始化时用 malloc 申请(栈容量 * 元素类型)个空间。 栈顶指针用于记录栈元素个数,始终指向栈顶元素的上一个单位(如 栈顶元素为base[3],栈顶指针为4),这样就能实现元素个数的记录。不过,栈顶指针只是一种形象化的叫法,方便起见,一般将其定义为 int 型。初始化时,栈顶指针置0。
定义结构体 struct sta typedef struct sta ZAN;
栈的建立(分配空间) ZAN* create() p=(ZAN *)malloc(sizeof(ZAN)); return p;
栈的初始化 void zer(ZAN *s)
压栈 压栈就是让元素进栈,栈顶指针 top 加一,元素存入数组 base[] 。如果已经栈满,可以增加内存空间(实际上是重新分配空间),此时栈容量 size 也要加一。用返回值判断是否压栈成功。
int push(ZAN *s,int x) if( (s->top) >= (s->size) ) }
取栈顶元素 取顶只用把栈顶元素的值记录下来,而不需要让其出栈。可以用指针来取值。同样,用返回值判断是否取顶成功。
int gettop(ZAN *s,int *e)
弹栈 弹栈是取出其值,并让栈顶元素出栈,top减一。同样,用指针记录其值,用返回值判断是否弹栈成功。
int pop(ZAN *s,int* e)
求栈长 取出 top 的值即可
int getlen(ZAN* s)
判断栈是否为空 看 top 是否为0即可
int isempty(ZAN* s)
输出栈元素 将 base[] 自顶向下输出即可,不对栈进行任何操作。
void list(ZAN* s) { int i;
puts("\n list ZAN:"); for(i=s->top-1;i>=0;i--) { if(i!=s->top-1) printf("\n"); //此处可以用空格代替换行 printf("%d",s->base[i]); } puts(""); }
测试功能
// TEST FUNCTION main() i=1;e=&i; // protect
if(!isempty(s)) puts("ZAN is empty\n"); // empty? puts(" push int x:"); // push an element in if(gettop(s,e)) printf("gettop %d\n",*e); // get top element printf("\n push int x:\n");
if(pop(s,e)) printf("pop %d\n",*e); //pop top element if(gettop(s,e)) printf("gettop %d\n",*e); // get top element if(!isempty(s)) puts("ZAN is empty\n"); // empty? printf("\n push int x:\n"); if(isempty(s)) list(s); //output ZAN |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论