东北石油大学计算机与信息技术学院
李勇勇
/*链栈结构*/ typedef struct StackNode { SElemType data; struct StackNode *next; }StackNode,*LinkStackPtr; typedef struct LinkStack { LinkStackPtr top; int count; }LinkStack; 栈的链式存储结构--进栈操作 /*插入栈顶元素*/ Status Push(LinkStack *S,SElemType e) { LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode)); s->data = e; } s->next = s->top;//把当前栈顶元素赋值给新结点的直接后继 s->top = s;//将新的结点s赋值给栈顶指针 s->count++; return OK; 栈的链式存储结构—出栈操作 /*如果栈不为空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR*/ Status Pop(LinkStack *S,SElemType *e) { LinkStackPtr p; if(StackEmpty(*S)) return ERROR; *e = S->top->data; p = S->top;//将栈顶结点赋值给P S->top = S->top->next;//使得栈顶指针下移一位,指向后一结点 free(p); S->count--; return OK; } 1