栈-链表的实现
来源:互联网 发布:第八课网络旅行 编辑:程序博客网 时间: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
- 栈模型的实现--链表实现
- 链表实现的栈
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈 链表的实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈-链表的实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 栈的链表实现
- 各种实现队列的问题:链表实现,栈实现队列及队列实现栈
- 栈的顺序表实现和链表实现
- glibc---memcpy源码
- 黑马程序员——JAVA学习日志之多线程(二)以及简单的单例和工厂模式
- c++第二次试验
- 利用chrome快速查找st中的组件
- 码农小汪-剑指Offer之21-二叉搜索树的后序遍历序列
- 栈-链表的实现
- Android Studio 学习 2
- android Spinner控件详解
- Java的类属性和实例属性
- mybatis 注解和xml的使用
- PHP中实现页面刷新或跳转的方法
- 【LeetCode-338】 Counting Bits
- 孤儿进程和僵尸进程
- Linux-Tomcat进程CPU使用率100%原因分析