栈可以采用链式存储结构表示,采用这种结构表示的栈简称为链栈。 在一个链栈中,栈底就是链表的最后一个节点,而栈顶总是链表的第一个节点。
与上文所讲的顺序栈相比,链栈有他的优点与缺点。
本文主要就是讲一些链栈相关的操作。
首先是建栈:
LinkStack* s = (LinkStack*)malloc(sizeof(LinkStack)/sizeof(char));
s->top = NULL;
为其分配空间,并将栈顶置空,一个栈就建好了。
入栈:
Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));
node->data = x;
node->next = s->top;
s->top = node;
新建一个节点,将新建节点成为栈顶元素,再将原来的栈顶元素指向新建的节点,这就是链栈的进栈过程。
出栈:
Node *p = s->top;
*x = p->data;
s->top = p->next;
free(p);
用一个p来保存栈顶元素,用一个x来取出栈顶元素的值,再让原先栈顶元素的下一个元素成为栈顶元素,最后释放p,就完成了出栈的过程。
获取栈顶元素数值:
*x = s->top->data;
获取栈顶元素数值就很简单了,其实出栈操作中已经有过了。