数据结构第3章精要.pptVIP

  • 0
  • 0
  • 约1.21万字
  • 约 84页
  • 2017-04-21 发布于湖北
  • 举报
数据结构第3章精要

第3章 限定性线性表—栈和队列 ;引言;3.1 栈 ;2. 栈的特点 “很窄的死胡同” 后进先出(Last In First Out),简称LIFO结构。 栈又称后进先出线性表。 3. 栈的基本运算 初始化 InitStack(S)。构造一个空栈 入栈 Push(S, e)。栈S已经存在,插入e为新的栈顶元素 出栈 Pop(S, e)。栈S存在且非空,删除栈顶元素,e返回 读栈顶元素 GetTop(S, e)。栈S存在且非空,用e返回栈顶元素 判栈空 StackEmpty(S)。栈S存在,若为空栈,返回真,否则假 ;4.栈的表示和实现 ;顺序栈的类型定义 typedef struct{ SElemType *base; //栈底指针 SElemType *top; //栈顶指针 int stacksize; //栈已分配的空间大小 }SqStack; //动态分配 typedef struct{ { SElemType data[MAXSIZE]; int top; } SqStack; //静态分配;空栈;顺序栈中的进栈和出栈 栈仅在表的一端进行操作; top指针始终指向栈顶元素的下一位置。;例,在栈中插入元素 A 和 B;例,删除栈顶元素 B 和 A;初始化 InitStack(SqStack S) { S.base = S.top = (SElemType *)malloc(…); if(!S.base) exit(OVERFLOW); S.stacksize = STACK_INIT_SIZE; return OK; };读栈顶元素 GetTop(SqStack S, SElemTypee) { if(S.top == S.base) return ERROR; e = *(S.top – 1); return OK; };入栈 Push(SqStack S, SElemType e) { if(S.top–S.base = S.stacksize){ S.base = (SElemType *)realloc(…); if(!S.base) exit(OVERFLOW); S.top = S.base + S.stacksize; S.stacksize += STACKINCREMENT; } *S.top++ = e; //*S.top = e; S.top++; return OK; };出栈 Pop(SqStack S, SElemType e) { if(S.top == S.base) return ERROR; e = *--S.top; //--S.top ; e = *S.top; return OK; };链栈 typedef struct STNode{ SElemType data; struct STNode *next; }STNode, *LinkStack; 栈顶结点 栈底结点 栈顶指针:链栈由栈顶指针S唯一确定 链栈本身无容量限制,在用户内存空间的范围内不会出现栈满情况;初始化 InitStack(LinkStack S) { S = NULL; return OK; };入栈 Push(LinkStack S, SElemType e) { p = (LinkStack) malloc( sizeof( STNode)); if(!p) exit(OVERFLOW); p-data = e; ①p-next = S; ②S = p; return OK; };出栈 Pop(LinkStack S, SElemType e) { if(S == NULL) return ERROR; e = S-data; ①p = S; ②S = S-next; free(p); return OK; };5.栈总结 栈是一种具有线性结构的数据结构,是操作受限的线性表; 栈的特点是后进先出,只能在栈顶进行插入和删除操作,分别称为入栈和出栈; 顺序栈中,栈空标志:S.top = S.base; 栈满标志:S.top – S.base = S.stacksize;

文档评论(0)

1亿VIP精品文档

相关文档