数据结构第四章栈和队列9.pptVIP

  • 22
  • 0
  • 约1.16万字
  • 约 50页
  • 2018-05-04 发布于四川
  • 举报
上机 1.上机调试书中所写的程序,写出运行结果。 2.定义一个栈,合理控制进栈和出栈次序,使abcd依次进栈,而出栈次序分别为bcda和cbad,并输出这写序列。 3. P113 4.2-3 *4. P113 4.3-1 第1节 栈 栈和队列是在软件设计中常用的两种数据结构,它们的逻辑结构和线性表相同。 其特点在于运算受到了限制:栈按“后进先出”的规则进行操作,队按“先进先出”的规则进行操作,故称运算受限制的线性表。 第2节 栈的顺序存储结构和操作实现 栈的顺序存储结构 栈的顺序存储结构(动态分配) 1) 初始化栈S为空 此操作可以包括两种情况,一种是置空并隐含分配固定大小的动态存储空间,另一种是置空并分配由参数指定大小的动态存储空间。 首先给出第一种置空的算法。 void InitStack(struct StackSq* S){ /*置栈空间初始最大长度为10*/ S-MaxSize=10; /*动态存储空间分配*/ S-stack=malloc(10*sizeof(ElemType)); /*置栈为空*/ S-top=-1; } 第二种置空栈的算法 void InitStack(struct StackSq* S, int ms){ /*检查ms是否有效,若无效则退出运行*/ if(ms=0) {printf(ms的值非法!\n); exit(1);} /*置栈空间大小为ms*/ S-MaxSize=ms; /*动态存储空间分配,若分配失败则退出运行*/ S-stack=malloc(ms*sizeof(ElemType)); if(!S-stack) { printf(动态存储分配失败!\n); exit(1); } /*初始置栈为空*/ S-top=-1; } 2) 新元素进栈,即把它插入到栈顶 void Push(struct StackSq* S, ElemType x){ /*若栈空间用完则重新分配更大的存储空间*/ if(S-top==S-MaxSize-1) againMalloc(S); /*栈顶指针后移一个位置*/ S-top++; /*将新元素插入到栈顶*/ S-stack[S-top]=x; } 在这个算法中,对栈满的处理方法是调用一个函数,使之得到大一倍的栈数组空间,接着进行新元素的插入操作。该函数定义如下: againMalloc(S) 该函数定义如下: againMalloc(S) void againMalloc(struct StackSq* S){ /*空间扩展为原来的2倍,原内容被自动 拷贝到p所指向的存储空间中*/ ElemType *p; p=realloc(S-stack,2*S-MaxSize*sizeof(ElemType)); if(!p) { /*分配失败退出运行*/ printf(存储空间用完!\n); exit(1); } /*使stack指向新的栈空间*/ S-stack=p; /*把栈空间大小修改为新的长度*/ S-MaxSize=2*S-MaxSize; } 3) 删除栈顶元素并返回值 ElemType Pop(struct StackSq* S) { /*若栈空则退出运行*/ if(S-top==-1) { printf(栈空,无元素出栈!\n); exit(1); } /*栈顶指针减1表示退栈*/ S-top--; /*返回原栈顶元素的值*/ return S-stack[S-top+1]; } 第3节 栈的链接存储结构和操作实现 2. 向链栈中插入一个元素 void Push(struct sNode** HS, ElemType x) { /*为插入元素获取动态结点*/ struct sNode *newp; newp=malloc(sizeof(struct sNode)); if(newp==NULL) {

文档评论(0)

1亿VIP精品文档

相关文档