栈 c实现
栈的数组实现
stack.h
#ifndef _STACK_
#define _STACK_ #define SIZE 100 typedef int data_t; typedef struct head{
data_t data[SIZE];
int top;
}stack_t; stack_t *stack_create(); int stack_is_empty(stack_t *head);
int stack_is_full(stack_t *head);
void stack_clear(stack_t *head); int stack_push(stack_t *head, data_t data);
data_t stack_pop(stack_t *head);
data_t stack_get_top(stack_t *head); void stack_show(stack_t *head);
void stack_destory(stack_t **head); #endif
stack.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h> #include "sqstack.h" stack_t *stack_create()
{
stack_t *head = (stack_t *)malloc(sizeof(stack_t));
if (head == NULL) {
printf("malloc failed!\n");
return NULL;
}
bzero(head, sizeof(stack_t)); head->top = -; return head;
} int stack_is_empty(stack_t *head)
{
return head->top == -;
} int stack_is_full(stack_t *head)
{
return head->top == SIZE - ;
} void stack_clear(stack_t *head)
{
head->top = -;
} int stack_push(stack_t *head, data_t data)
{
if (stack_is_full(head)) {
printf("stack is full!\n");
return -;
} head->data[head->top+] = data;
head->top++; return ;
} data_t stack_pop(stack_t *head)
{
if (stack_is_empty(head)) {
printf("stack is empty!\n");
return -;
} data_t data = head->data[head->top];
head->top--; return data;
} data_t stack_get_top(stack_t *head)
{
if (stack_is_empty(head)) {
printf("stack is empty!\n");
return -;
} return head->data[head->top];
} void stack_show(stack_t *head)
{
int i;
for (i = head->top; i >= ; i--) {
printf("%d, ", head->data[i]);
}
printf("\n");
} void stack_destory(stack_t **head)
{
free(*head);
*head = NULL;
}
main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h> #include "sqstack.h" int main()
{
stack_t *head = stack_create(); int n = ;
while (n--) {
stack_push(head, n+);
}
stack_show(head); int i;
for (i = ; i < ; i++) {
printf("%d, ", stack_get_top(head));
printf("%d\n", stack_pop(head));
}
stack_show(head); stack_destory(&head); return ;
}
栈的链表实现
lstack.h
#ifndef _STACK_
#define _STACK_ typedef int data_t; typedef struct node{
data_t data;
struct node *next;
}NODE; NODE *stack_create(); int stack_is_empty(NODE *head);
int stack_is_full(NODE *head); int stack_length(NODE *head);
void stack_clear(NODE *head); int stack_push(NODE *head, data_t data);
data_t stack_pop(NODE *head);
data_t stack_get_top(NODE *head); void stack_show(NODE *head);
void stack_destory(NODE **head); #endif
lstack.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h> #include "lstack.h" NODE *stack_create()
{
NODE *head = (NODE *)malloc(sizeof(NODE));
if (NULL == head) {
printf("malloc failed!\n");
return NULL;
}
bzero(head, sizeof(NODE)); head->data = -;
head->next = NULL; return head;
} int stack_is_empty(NODE *head)
{
return head->next == NULL;
} int stack_is_full(NODE *head)
{
return ;
} int stack_length(NODE *head)
{
NODE *p = head->next;
int len = ; while (NULL != p) {
len++;
p = p->next;
} return len;
} void stack_clear(NODE *head)
{
NODE *p = head->next;
NODE *q = NULL; while (NULL != p) {
q = p->next;
free(p);
p = q;
} head->next = NULL;
} int stack_push(NODE *head, data_t data)
{
NODE *p = head;
NODE *q = (NODE *)malloc(sizeof(NODE));
if (NULL == q) {
printf("malloc failed!\n");
return -;
}
q->data = data;
q->next = NULL; q->next = p->next;
p->next = q; return ;
} data_t stack_pop(NODE *head)
{
if (stack_is_empty(head)) {
printf("list is empty!\n");
return -;
} data_t data = head->next->data; NODE *p = head;
NODE *q = head->next;
p->next = q->next;
free(q);
q = NULL; return data;
} data_t stack_get_top(NODE *head)
{
if (stack_is_empty(head)) {
printf("list is empty!\n");
return -;
} return head->next->data;
} void stack_show(NODE *head)
{
NODE *p = head->next; while (NULL != p) {
printf("%d, ", p->data);
p = p->next;
}
printf("\n");
} void stack_destory(NODE **head)
{
stack_clear(*head); free(*head);
*head = NULL;
}
main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h> #include "lstack.h" int main()
{
NODE *head = stack_create(); if (NULL == head) {
printf("create failed!\n");
return -;
} int n = ;
while (n--) {
if (- == stack_push(head, n+)) {
printf("insert failed!\n");
break;
}
} stack_show(head); int i;
for (i = ; i < ; i++) {
printf("%d, ", stack_get_top(head));
printf("%d\n", stack_pop(head));
} stack_destory(&head); return ;
}
栈 c实现的更多相关文章
- 通往全栈工程师的捷径 —— react
腾讯Bugly特约作者: 左明 首先,我们来看看 React 在世界范围的热度趋势,下图是关键词“房价”和 “React” 在 Google Trends 上的搜索量对比,蓝色的是 React,红色的 ...
- Java 堆内存与栈内存异同(Java Heap Memory vs Stack Memory Difference)
--reference Java Heap Memory vs Stack Memory Difference 在数据结构中,堆和栈可以说是两种最基础的数据结构,而Java中的栈内存空间和堆内存空间有 ...
- duang~免费的学习视频来啦:学霸君之全栈测试
学霸君向童鞋们推荐一款 同名学霸学习 视频教程 重点是完全免费收看学习噢!!! 今天 学霸君推荐腾讯课堂的学霸君之全栈测试 复制下方链接至腾讯课堂中报名学习 https://ke.qq.com/cou ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- .NET全栈开发工程师学习路径
PS:最近一直反复地看博客园以前发布的一条.NET全栈开发工程师的招聘启事,觉得这是我看过最有创意也最朴实的一个招聘启事,更为重要的是它更像是一个技术提纲,能够指引我们的学习和提升,现在转载过来与各位 ...
- Nodejs之MEAN栈开发(八)---- 用户认证与会话管理详解
用户认证与会话管理基本上是每个网站必备的一个功能.在Asp.net下做的比较多,大体的思路都是先根据用户提供的用户名和密码到数据库找到用户信息,然后校验,校验成功之后记住用户的姓名和相关信息,这个信息 ...
- 匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置
0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到“类型”,话题的热度就会立马升温,因为很多似是而非.或者片面的概念常常被人们当做是全面和正确的答案.加之最近在园子看到有人翻译的& ...
随机推荐
- Spring Boot集成Thymeleaf
Thymeleaf是一个java类库,是一个xml/xhtml/html5的模板引擎,可以作为mvc的web应用的view层.Thymeleaf提供了额外的模块与Spring MVC集成,所以我们可以 ...
- windows下进程间通信与线程间通信
进程间通信: 1.文件映射(Memory-Mapped Files) 文件映射(Memory-Mapped Files)能使进程把文件内容当作进程地址区间一块内存那样来对待.因此,进程不必使用文件I/ ...
- MIR7预制发票扣除已经预制的数量(每月多次预制,未即时过账)
业务场景见抬头,有没有标准的解决方案就不说了,也没去考虑... 这个增强还是SAP老表提供的,感谢,省了不少时间. INCLUDE:LMR1MF6S 最后的位置 ENHANCEMENT ZMIR7_0 ...
- 在spring中,C3P0的一些配置(部分)
<!-- c3p0连接池配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPoo ...
- 2017-3-31/socket
1. 讲讲你对套接字编程的理解,它的协议是如何的? socket通常称为"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通过套接字向网络发出请求或应答网络请求. 服 ...
- Caused by: java.io.FileNotFoundException: class path resource [spring/springmvc.xml] cannot be opene
Caused by: java.io.FileNotFoundException: class path resource [spring/springmvc. ...
- Python面向对象之继承
前言: 继承是面向对象的3大特性之一,对于继承一点要注意一下4点. 一.基本查找 如果子类继承了父类,子类的实例化对象,没有的方法和属性会去父类找 class Parent(object): #父类 ...
- 谈一谈JUnit神奇的报错 java.lang.Exception:No tests found matching
最近在学习Spring+SpringMVC+MyBatis,一个人的挖掘过程确实有点艰难,尤其是有一些神奇的报错让你会很蛋疼.特别是接触一些框架还是最新版本的时候,会因为版本问题出现很多错误,欢迎大家 ...
- Linux的安装包命令/yum 与 Rpm
1.Rpm安装包命令(以dhcp软件包为例)----Rpm安装软件包需要解决依赖性,因此特别麻烦(如图2被需要). rpm与yum安装的均为二进制软件包.类似于windows下载的软件包,可直接安装使 ...
- 使用laravel搭建CURD后台页面
配置即一切 一切皆于需求,后台从0开始搭建,但是写了一两个页面后发现太多的是对单表的增删改查操作,于是就想到了,能不能做一个快速搭建的后台.想到一句话,配置即一切.如果一个CURD后台能只进行配置就自 ...