用线性链表实现栈的功能
来源:互联网 发布:4s移动3g网络设置方法 编辑:程序博客网 时间:2024/04/30 20:20
下面的图片是原理图:
第一个是执行stackcreate()函数之后的结果;
第二个是第一次执行stackpush(货物1);
第三个是第二次执行stackpush(货物2);
程序代码:
stacklink.h
#ifndef __STACKLINK_H__#define __STACKLINK_H__typedef int stackdata;typedef struct stack{stackdata data;struct stack *next;}stacknode;typedef struct{stacknode *top;int n;}stacklink;extern stacklink *stackcreate(void); //创建栈extern void stackpush(stacklink *s, stackdata data);//入栈extern stackdata stackpop(stacklink *s);//出栈extern stackdata stackgettop(stacklink *s);//获取栈顶数据extern int stackempty(stacklink *s);//判断是否为空#endif
stacklinc.c
#include "stacklink.h"#include <stdlib.h>stacklink *stackcreate(void){stacklink *s = (stacklink *)malloc(sizeof(stacklink));s->top = (stacknode *)malloc(sizeof(stacknode));s->top->next = NULL;s->n = 0;return s;}void stackpush(stacklink *s, stackdata data){stacknode *temp = (stacknode *)malloc(sizeof(stacknode));temp->data = data;temp->next = s->top->next;s->top->next = temp;s->n++;}/*执行pop是采用的方法是:先保存s->top的值给temp,即temp指向stacknode1,然后依靠temp->next使s->top指向stacknode2,stacknode2的data即为要出栈的元素,然后将stacknode1释放,将stacknode2的data返回,此时stacknode2取代了stacknode1的地位,stacknode2的data成为了“无效数据”。*/stackdata stackpop(stacklink *s){stacknode *temp = s->top;s->top = s->top->next;free(temp);s->n--;return s->top->data;}stackdata stackgettop(stacklink *s){return s->top->next->data;}int stackempty(stacklink *s){return s->top->next==NULL;}
- 用线性链表实现栈的功能
- C语言实现线性链表的19个功能
- 数据结构--线性表的所有功能实现
- 线性表的添加、删除、插入功能的顺序实现
- 数据结构——线性表以及各功能的实现
- 数组实现线性表部分功能
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 线性表的实现
- 解决Ubuntu wireshark找不到Interface问题
- 基于Delphi的接口编程入门
- 配置wxWidgets时碰到的link error
- CentOS 6.0下vncserver安装配置
- Java----IO流
- 用线性链表实现栈的功能
- 将类给实例化
- 正则表达式的数字实例
- 三星新推出Tizen操作系统初体验
- 工作感悟
- unity3d中javasciprt脚本参考
- POJ 1113 Wall
- .....................
- Asynchronous image loading is easy with AQuery.