栈:限定仅在一端进行插入或删除操作的线性表
根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最后放入的元素最后删除。
特点:后进先出(先进后出)
也就是说,栈是一种后进先出的线性表,简称LIFO(Last In First Out)表。
栈的链式存储结构简称链栈。
注意链表中指针的方向是从栈顶到栈底
因为栈的所有操作在栈顶进行,所以可以不需要头节点,栈顶指针就相当于链表的头指针。
链栈的结构类型
typedef ?? SElemType //由实际需要决定 typedef struct SNode { SElmType data;//数据域 struct SNode *next;//指针域 }SNode,*LStack; LSatck S;//定义指向结点的指针s /*------链栈的基本操作------*/ Status InitStack(LStack &S); Status GetTop(LStack &S,SElemType e); Status Push(LStack &S,SElemType e); Status Pop(LStack &S,SElemType e);
初始化栈 Status InitStack(LStack &S) { S = NULL; return OK; } 获取栈顶元素 Status GetTop(LStack S,SElemType &e) { if(!S ) return ERROR; e = S->data; return OK; } 入栈 Status Push(LStack &S,SElemType e) { LStack p; p = (LStack )malloc(sizeof(SNode)); if(p == NULL) { perror("malloc error"); exit(-1); } p->next = S; S = p; return OK; } 出栈 Status Pop(LStack &S,SElemType &e) { LStack p = S; if(!S) { printf("空栈/n"); return ERROR; } e = S->data; S = p->next; free(p); p = NULL; return OK; }