文档章节

链表栈-》与数组栈同接口-》更确切地说是单项链表的接口封装

Palmer神经质
 Palmer神经质
发布于 2014/04/10 16:18
字数 409
阅读 68
收藏 2
/*************************************************************************
    > File Name: stack.h
    > Author: Palmer XU
    > Mail:  
    > Created Time: Wed 09 Apr 2014 09:39:55 PM EDT
 ************************************************************************/
#ifndef __STACK_H__
#define __STACK_H__
#include"single.h"
typedef struct stack
{
 pnode_t head;
}stack_t,*pstack_t;
int creat_stack(pstack_t*);
int stack_not_empty(pstack_t);
int push(pstack_t,int);
int pop(pstack_t,int*);
int top(pstack_t,int*);
int clear_stack(pstack_t);
int count_size(pstack_t);
int destory_stack(pstack_t*);
#endif
/*************************************************************************
    > File Name: stack.c
    > Author: Palmer XU
    > Mail: Palmer.Xu.One@Gmail.com 
    > Created Time: Wed 09 Apr 2014 10:55:25 PM EDT
 ************************************************************************/
#include<stdio.h>
#include"stack.h"
int main(void)
{
 pstack_t p ;
 creat_stack(&p);
 printf("%d\n",stack_not_empty(p));
 int i = 1;
 for(;i <= 3;i++)
  push(p,i);
 pop(p,&i);
 printf("%d\n",i);
 top(p,&i);
 printf("%d\n",i);
 printf("%d\n",stack_not_empty(p));
 printf("%d\n",count_size(p));
 clear_stack(p);
 printf("%d\n",stack_not_empty(p));
 printf("%d\n",count_size(p));
 pop(p,&i);
 i = destory_stack(&p);
 printf("%d\n",i);
 printf("%d\n",count_size(p));
 
 return 0;
} 

/*************************************************************************
    > File Name: stack_fun.c
    > Author: Palmer XU
    > Mail: Palmer.Xu.One@Gmail.com 
    > Created Time: Wed 09 Apr 2014 10:06:42 PM EDT
 ************************************************************************/
#include"stack.h"
#include<stdlib.h>
int creat_stack(pstack_t *p_temp)
{
 *p_temp = (pstack_t)malloc(sizeof(stack_t));
 pstack_t p = *p_temp;
 if(NULL != p && NULL != (p->head = creat_list()))
 {
  return 0;
 }
 printf("error- -creat_stack fail\n");
 free(p);
 *p_temp = NULL;
 return -1;
 
}
int stack_not_empty(pstack_t p)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 if(NULL != p->head->next)
  return 0;
 else
  return -1;
}
int push(pstack_t p,int data)
{
 if(NULL == p)
 {
  printf("error\n");
  return 0;
 }
 return insert_after(p->head,data);
}
int pop(pstack_t p,int *data)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 if(NULL != p->head->next)
  *data = p->head->next->data;
 return delete_after(p->head);
}
int top(pstack_t p,int* data)
{
 if(NULL == p || NULL == p->head->next)
 {
  printf("error\n");
  return -1;
 }
 *data = p->head->next->data;
 return 0;
}
int clear_stack(pstack_t p)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 return destory_after(p->head);
}
int count_size(pstack_t p)
{
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 return count_size_list(p->head);
}
int destory_stack(pstack_t *p_flag)
{
 pstack_t p = *p_flag;
 if(NULL == p)
 {
  printf("error\n");
  return -1;
 }
 p->head = destory_all(p->head);
 free(p);
 *p_flag = NULL;
 return 0;
}

© 著作权归作者所有

Palmer神经质
粉丝 0
博文 9
码字总数 3660
作品 0
杭州
程序员
私信 提问
Java集合族谱总结

集合族谱核心成员 集合族谱核心成员 所有的集合类,都实现了Iterator接口,这是用于遍历集合中元素的接口;Java集合框架核心是两个类型的容器,一种是集合(Collection),存储单一元素,一种...

翻滚吧李博
2017/12/19
0
0
Java数据结构与算法(第五章链表)

数组作为数据存储机构有一定的缺陷。在无序数组中,搜索是低效的;而在有序数组中,插入效率又很低;不管在哪一种数组重删除效率都很低。况且一个数组创建后,它的大小是不可改变的。 链表可...

小风89
2015/10/24
213
1
数据结构-栈&队列&Deque实现比较

栈 栈: 限定仅在表尾进行插入和删除操作的线性表; 后进先出(LIFO)。 在表尾进行操作,表尾是栈顶;最新进栈的元素在栈底。 栈的ADT Stack_ADT 进栈&出栈 栈 栈的存储结构实现 顺序栈 栈也...

IAM四十二
2017/10/22
0
0
自己动手实现java数据结构(三) 栈

1.栈的介绍   在许多算法设计中都需要一种"先进后出(First Input Last Output)"的数据结构,因而一种被称为"栈"的数据结构被抽象了出来。   栈的结构类似一个罐头:只有一个开口;先被放...

小熊餐馆
2018/12/06
0
0
Java 基础(四)集合源码解析 List

List 接口 前面我们学习了Iterator、Collection,为集合的学习打下了基础,现在我们来学习集合的第一大体系 List。 List 是一个接口,定义了一组元素是有序的、可重复的集合。 List 继承自 ...

diamond_lin
2017/09/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
59分钟前
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
4
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部