自己动手写一个栈
来源:互联网 发布:淘宝需要开定位吗 编辑:程序博客网 时间:2024/05/24 07:32
栈是一种后进先出的结构,实现栈有两种方法,链表和数组。用链表的好处在于不用提前声明大小,只在需要的时候创建。而使用数组的好处在于不用指针操作,但是却需要提前声明数组大小。不过通常使用栈的时候,容量都不需要太大,所以使用数组实现也是不错的方法。栈的数组实现比较简单,所以本文只写栈的链表实现。
1)定义链表结点以及相关内容
typedef char elemtype; //定义栈中元素类型typedef struct node node; typedef struct node *pnode; //pnode为指向struct node的指针typedef pnode stack;struct node { elemtype data;struct node *next;};
2)定义栈操作函数
void error(const char *msg); //错误提示函数int isEmpty(stack s); //判断栈是否为空的函数void pop(stack s); //弹出栈顶元素void push(stack s, elemtype x); //压入元素x到栈中elemtype top(stack s); //返回栈顶元素stack createStack(); //创建栈void makeEmpty(stack s);//清空栈
3)创建栈
创建栈函数createStack(),创建一个包含一个头结点的链表,注意这个头结点是不用的,它只用来做链表的表头,方便操作。其中makeEmpty(stack s)函数用于清空栈s,也就是将s中存在的元素全部pop出来,pop函数在后面实现。
stack createStack(){stack s = (stack)malloc(sizeof(node));s->next = NULL;makeEmpty(s);return s;}void makeEmpty(stack s){if (s == NULL)error("must create stack first");while (!isEmpty(s))pop(s);}
4)判断栈是否为空
判断栈是否为空的函数isEmpty(stack s)实现很简单,只需要判断s->next==NULL即可。
int isEmpty(stack s){return s->next == NULL;}
5)核心函数pop、push、top
push函数就是将元素x插入到链表头部(表头的后面),pop函数则是将链表的第一个有效结点(表头后面的第一个结点)弹出,top函数返回链表的第一个有效结点的元素值。
void push(stack s, elemtype x){pnode tmp = (stack)malloc(sizeof(node));if (tmp == NULL)error("no memory");else {tmp->data = x;tmp->next = s->next;s->next = tmp;}}void pop(stack s){if (isEmpty(s))error("stack is empty");else {pnode first = s->next;s->next = s->next->next;free(first);}}elemtype top(stack s){if (isEmpty(s)) {error("stack is empty");return 0;} else {return s->next->data;}}
- 自己动手写一个栈
- 自己动手写一个Makefile
- 自己动手写一个WIDGET
- 自己动手写一个Struts2
- 自己动手写一个Struts2
- 自己动手写一个Camera
- 自己动手写一个“tomcat”
- 自己动手写一个Camera
- 自己动手写一个推荐系统
- 自己动手写一个推荐系统
- 自己动手写一个推荐系统
- 自己动手写一个推荐系统
- java自己动手写一个死锁
- 自己动手写一个推荐系统
- 自己动手写一个 WordPress 插件
- 自己动手写一个推荐系统
- 自己动手写一个C++ STL vector
- 自己动手写一个RSS的阅读器
- HttpClient 教程
- 快乐的程序——接口之本
- hdu_1565&1569
- Video4Linux
- java的输入方法
- 自己动手写一个栈
- 嫣然一笑苦了情
- strlen与sizeof区别
- 11级_Java_曹建波 09.20 泛型
- hdu_2732
- MES中POP
- hdu 2971 Tower(*矩阵乘法)
- 网络编程
- 你准备好了吗?IT民工转型升级的职业规划