3.1.4顺序栈1.顺序栈的数据类型#define STACKINITSIZE1OO://存储空间初始分配量#defineSTACKINCREMENT1O:/存储空间分配增量typedef struct seqstack(elemtype*base;//构造之前和销毁之后,base的值为NULLelemtype*top;//指向栈顶位置的指针int stacksize://当前已分配的存储空间,以元素为单位fseqstack;
3.1.4 顺序栈 1.顺序栈的数据类型 #define STACK_INIT_SIZE 100; //存储空间初始分配量 #define STACKINCREMENT 10; //存储空间分配增量 typedef struct seqstack {elemtype *base; //构造之前和销毁之后,base的值为NULL elemtype *top; //指向栈顶位置的指针 int stacksize;//当前已分配的存储空间,以元素为单位 }seqstack;
2.栈的五种运算(1)初始化栈void inistack(seqstack &s)( s.base=(elemtype *)malloc(maxsize*sizeof(elemtype))if (!s.base) exit(OVERFLOW);s.top=s.base;s.stacksize=STACK INIT SIZEreturn OK;
2.栈的五种运算 (1)初始化栈 void inistack(seqstack &s) { s.base=(elemtype *)malloc(maxsize*sizeof(elemtype)); if (!s.base) exit(OVERFLOW); s.top=s.base; s.stacksize=STACK_INIT_SIZE; return OK; }
进栈(2))void push(seqstack &s, elemtype x)if (s.top-s.base>=s.stacksize)(s.base-(elemtype*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(elemtype)if (ls.base) exit(OVERFLOW);s.top=s.base+s.stacksize;s.stacksize+=STACKINCREMENT;*s.top++=e,return OK,7
(2) 进栈 void push(seqstack &s, elemtype x) { if (s.top-s.base>=s.stacksize) {s.base=(elemtype*)realloc(s.base,(s.stacksize+STACKINCREMENT)*sizeof(elemtype)); if (!s.base) exit(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=STACKINCREMENT; } *s.top++=e; return OK; }
(3)退栈void pop(seqstack &s, elemtype &e)if (s.top= =s.base) return ERROR;e=*--s.top,return OK;
(3) 退栈 void pop(seqstack &s, elemtype &e) { if (s.top= =s.base) return ERROR; e=*-s.top; return OK; }
(4)取栈顶元素elemtype gettop(seqstack s, elemtype &e)1if (s.top= =s.base) return ERROR;e=*(s.top-1);return OK;
(4) 取栈顶元素 elemtype gettop(seqstack s, elemtype &e) { if (s.top= =s.base) return ERROR; e=*(s.top-1); return OK; }