数据结构C语言版_栈顺序存储表示及实现.docVIP

  • 3
  • 0
  • 约3.01千字
  • 约 7页
  • 2017-08-26 发布于河南
  • 举报

数据结构C语言版_栈顺序存储表示及实现.doc

数据结构C语言版_栈顺序存储表示及实现

数据结构C语言版_栈顺序存储表示及实现 /* 数据结构C语言版 栈的顺序存储表示和实现 P46-P47 栈顶指针始终指向当前栈顶元素的下一个位置, 栈顶指针和栈底指针相同的为空栈。 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月12日 */ #include stdio.h #include malloc.h typedef char SElemType; // 栈的元素类型 #define STACK_INIT_SIZE 10 // 存储空间初始分配量 #define STACKINCREMENT 2 // 存储空间分配增量 // 栈的顺序存储表示 P46 typedef struct SqStack { SElemType *base; // 在栈构造之前和销毁之后,base的值为NULL SElemType *top; // 栈顶指针 int stacksize; // 当前已分配的存储空间,以元素为单位 }SqStack; // 顺序栈 // 构造一个空栈S。 int InitStack(SqStack *S) { // 为栈底分配一个指定大小的存储空间 (*S).base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if( !(*S).base ) exit(0); // 存储分配失败 (*S).top = (*S).base; // 栈底和栈顶相同表示一个空栈 (*S).stacksize = STACK_INIT_SIZE; return 1; } // 若栈S为空栈(栈顶和栈底相同的),则返回1,否则返回0。 int StackEmpty(SqStack S) { if(S.top == S.base) return 1; else return 0; } // 插入元素e为新的栈顶元素。 int Push(SqStack *S, SElemType e) { if((*S).top - (*S).base = (*S).stacksize) // 栈满,追加存储空间 { (*S).base = (SElemType *)realloc((*S).base, ((*S).stacksize + STACKINCREMENT) * sizeof(SElemType)); if( !(*S).base ) exit(0); // 存储分配失败 (*S).top = (*S).base+(*S).stacksize; (*S).stacksize += STACKINCREMENT; } *((*S).top)++=e; // 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左 return 1; } // 若栈不空,则删除S的栈顶元素,用e返回其值,并返回1;否则返回0。 int Pop(SqStack *S,SElemType *e) { if((*S).top == (*S).base) return 0; *e = *--(*S).top; // 这个等式的++ * 优先级相同,但是它们的运算方式,是自右向左 return 1; } // 销毁栈S,S不再存在。 int DestroyStack(SqStack *S) { free((*S).base); //释放栈底的空间,并置空 (*S).base = NULL; (*S).top = NULL; (*S).stacksize = 0; return 1; } // 把S置为空栈。 int ClearStack(SqStack *S) { (*S).top = (*S).base; //栈底栈顶相同为空栈 return 1; } // 返回S的元素个数,即栈的长度。 int StackLength(SqStack S) { // 栈顶指针减去栈底指针刚好等于长度,因为栈顶指针指向当前栈 // 顶元素的下一个位置。 return S.top - S.base; } // 若栈不空,则用e返回S的栈顶元素,并返回1;否则返回0。 int GetTop(SqStack S,SElemType *e) { if(S.top S.base) { *e = *(S.top-1); // 栈顶指针的下一个位置为栈顶元素 return 1; } else return 0; } // 从栈底到栈顶依次对栈中每个元素调用函数visit()。 int StackTraverse(SqStack S,int(*

文档评论(0)

1亿VIP精品文档

相关文档