栈-链表的实现

来源:互联网 发布:第八课网络旅行 编辑:程序博客网 时间:2024/05/13 05:47
</pre><pre name="code" class="cpp"><pre name="code" class="cpp"># include <stdio.h># include <malloc.h># include <stdlib.h>typedef struct NODE                   // 创建结点的结构体 {int data;struct NODE *next;}node,*pnode;typedef struct STRACK//创建头指针和尾指针的结构体 {pnode ptop;pnode pbottom;}stack,*pstack;void traverse(pstack ps);//遍历栈输出 void init(pstack ps);// 建立头指针和尾指针 void push(pstack ps,int val);//压栈 void clear(pstack ps);//释放栈 void pop(pstack ps,int * val);//栈顶元素出栈   (出栈) int main (void){int val;pstack ps;ps = (pstack)malloc(sizeof(stack));//为头指针和尾指针分配空间 init(ps);push(ps,1);push(ps,2);push(ps,3);traverse(ps);pop(ps,&val);traverse(ps);pop(ps,&val);traverse(ps);clear(ps);traverse(ps);return 0;}void init(pstack ps){pnode ptr;ptr = (pnode)malloc(sizeof(node));ptr = ps->ptop;ps->pbottom = ps->ptop;//将头指针和尾指针初始化ps->ptop->next = NULL; }void push(pstack ps,int val){pnode ptr;ptr = (pnode)malloc(sizeof(node));//为结点分配空间 ptr->data = val;//将目标元素存入结点 ptr->next = ps->ptop;//指向上一节点 ps->ptop = ptr;//将头指针上移 }void clear(pstack ps){pnode p,q;p = ps->ptop;//将p指向头结点 q = NULL;while(p != ps->pbottom)   //遍历栈 {q = p->next;//将q指向上一节点 free(p);//释放p p = q;}ps->ptop = ps->pbottom;//将头指针初始化 }void pop(pstack ps,int * val){pnode ptr;ptr = ps->ptop;//将ptr指向头指针 *val = ptr->data;//指针*val指向ptr中的元素 ps->ptop = ptr->next;//将头指针下移 free(ptr);//释放ptr结点 ptr=NULL;}void traverse(pstack ps){pnode ptr;ptr = ps->ptop;//将ptr指向头指针 while(ptr != ps->pbottom)//遍历栈 {printf ("%d ",ptr->data);//输出栈中元素 ptr = ptr->next;//指向上一结点 }printf ("\n");}


                                             
0 0