数据结构栈中元素有0怎么办?
数据结构栈中元素有0怎么办?用顺序栈的话结果存不进去,怎么办?
你看看这个例子吧 */ # include "stdio。h" # include "stdlib。h" # define STACK_INIT_SIZE 10/*存储空间初始分配量,为了突出stackincrement有用 此处改小点为10(没有分号)*/ # define stackincrement 10/*存储空间分配增量,因为是顺序存储结构 一次分配固定的内存,本题是100个,而不是 动态分配存储空间,所以需要定义一个增量*/ typedef int SElemType; typedef struct { SElemType *base;//栈底指针,栈构造之前和销毁之后,其值为NULL SElemType *top;//栈顶指针 int stacksize;//当前已经分配的存储空间,以元素为单位 }SqStack; void print(SElemType c) { printf("%d ",c); } //构造一个空栈S void InitStack(SqStack * S) { if (! ((* S)。
base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType))))//一次分配10个int类型的空间 { exit(-1); } (* S)。top = (* S)。
base; (* S)。stacksize = STACK_INIT_SIZE; } //将元素e插入栈顶 void Push(SqStack * S,SElemType e) { if ((* S)。top-(* S)。base >= (* S)。
stacksize)//栈满,利用realloc增加存储空间每次增加stackincrement个int类型空间 { (* S)。base = (SElemType *)realloc((* S)。base,((* S)。stacksize+stackincrement)*sizeof(SElemType)); if (!(* S)。
base) { exit (-1); } (* S)。top = (* S)。base + (* S)。stacksize; (* S)。stacksize = (* S)。stacksize + stackincrement; } *((* S)。
top)++ = e; } //从栈底到栈顶依次对栈中每个元素调用函数visit void StackTraverse(SqStack S,void (* visit)(SElemType)) { while (S。top > S。
base) { visit(*(S。base)++); } printf("\n"); } int main(void) { int j; SqStack s; SElemType e; InitStack(&s); printf("初始化后栈s的空间为%d\n",s。
stacksize); for (j=1; j<=12; ++j) { Push(&s,j); } printf("操作完后,栈s的空间为%d\n",s。stacksize);/*第一次只分配了10个空间 但需要压入12个元素 所以需要增加stacksize个*/ printf("栈中的元素为:"); StackTraverse(s,print); return 0; } /* 在vc++6。
0中的输出结果: ------------------------ 初始化后栈s的空间为10 操作完后,栈s的空间为20 栈中的元素为:1 2 3 4 5 6 7 8 9 10 11 12 ------------------------------。
答:(1)入栈顺序是1 2 3 4,就是指这四个数依次入栈: 数据4入栈之前,1 2 3肯定已经入栈了; 数据3入栈之前,1 2肯定已经入栈了,而4还没入栈; 数据...详情>>
答:详情>>