C_数据结构_栈
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h> typedef struct Node //建造节点
{
int data;
struct Node * pNext;
}NODE, * PNODE; typedef struct Stack //建造栈所需要的两个参数
{
PNODE pTop; //指向栈顶的元素
PNODE pBottom; //指向栈底没有实际含义的元素
}STACK, * PSTACK;// PSTACK 等价于 struct Stack * void init(PSTACK); //初始化
void push(PSTACK, int); //压栈
void traverse(PSTACK); //遍历输出
bool pop(PSTACK, int *); //出栈
void clear1(PSTACK); //清空
void clear2(PSTACK);//清空 int main(void)
{
STACK S; //STACK 等价于 struct Stack
int val; init(&S); //初始化 目的是造出一个空栈
push(&S, ); //压栈
push(&S, );
push(&S, );
push(&S, );
push(&S, );
push(&S, );
traverse(&S); //遍历输出 if ( pop(&S, &val) ) //出栈
{
printf("出栈成功!出栈的元素是:%d\n", val);
}
else
{
printf("出栈失败!\n");
} traverse(&S); //遍历输出 clear2(&S);
traverse(&S); //遍历输出 return ;
} void init(PSTACK pS) //初始化
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
if (NULL == pS->pTop)
{
printf("动态内存分配失败!\n");
exit(-);
}
else
{
pS->pBottom = pS->pTop;
pS->pTop->pNext = NULL; //pS->pBottom->pNext = NULL;
}
} void push(PSTACK pS, int val) //压栈
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
pNew->data = val;
pNew->pNext = pS->pTop; //不能把 pS->Top 改为 pS->pBottom
pS->pTop = pNew; return;
} void traverse(PSTACK pS) //便利输出
{
PNODE p = pS->pTop;
while (p != pS->pBottom)
{
printf("%d ", p->data);
p = p->pNext;
}
printf("\n"); return;
} bool empty(PSTACK pS) //判断是否空
{
if (pS->pTop == pS->pBottom)
{
return true;
}
else
{
return false;
}
} //把PS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败返回false,否则返回true
bool pop(PSTACK pS, int * pVal)
{
if ( empty(pS) ) // pS 形参本身保存的是 S 的地址,这里需要将S的地址发送给 empty() 函数只要发送 pS即可
{
return false;
}
else
{
PNODE r = pS->pTop; //需要把他定义成已 pS->pTop 为类型的地址变量
*pVal = pS->pTop->data; //等价于 r->data
pS->pTop = pS->pTop->pNext; //等价于 r->pNext
free(r); //这里释放的是r所指向的动态内存
r = NULL; //这里表示清空地址变量 r 的数据以便下次分配 return true;
}
} void clear2(PSTACK pS) //清空
{
PNODE p;
int i;
printf("清空的值都有:"); while ( pS->pTop != pS->pBottom )
{
p = pS->pTop;
i = p->data;
printf("%d ", i);
pS->pTop = p->pNext;
free(p);
p = NULL;
}
printf("\n"); i = NULL;
pS->pTop = pS->pBottom;
} void clear1(PSTACK pS) //清空
{
if ( empty(pS) )
{
return;
}
else
{
PNODE p = pS->pTop;
PNODE q = p->pNext; while (p != pS->pBottom)
{
q = p->pNext;
free(p);
p = q;
}
pS->pTop = pS->pBottom;
} }
C_数据结构_栈的更多相关文章
- c_数据结构_栈的实现
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_1_数据结构_栈
2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类 的.好用吗?好用,这就是数据结构的用处,只不过你在不知不 ...
- C#数据结构_栈和队列
栈:先进后出,只能在栈顶进行操作. 栈的操作主要包括在栈顶插入元素和删除元素.取栈顶元素和判断栈是否为空等. 栈的接口定义: public interface IStack<T> { in ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_队的实现
# 链式存储#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100//存储空间初始分配量 #defin ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
- C_数据结构_走迷宫
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...
随机推荐
- jQuery选择元素的方法大全
jQuery选择器其实是一个有些地方比较费解的,如果没有经过多次实验的话,很难得出它的每个操作符到底是干什么的,很容易出错,经过 我的多次测试,终于对一些比较难理解或容易出错的选择操作进行总结,既方便 ...
- 实战:阿里巴巴 DevOps 转型后的运维平台建设
导读:阿里巴巴DevOps转型之后,运维平台是如何建设的?阿里巴巴高级技术专家陈喻结合运维自身的理解,业务场景的分析和业界方法论的一些思考,得出来一些最佳实践分享给大家. 前言 “我是这个应用 ...
- Linux 小知识翻译 - 「Linux和CPU的兼容性」
Linux刚开始是作为可运行在 Intel 的 「i386」CPU上,与POSIX兼容的内核来开发的. 而现在主流的Linux是指能在所谓「PC」上运行的内核.「PC」是指采用「IA(intel架构) ...
- 基于tomcat插件的maven多模块工程热部署(附插件源码)
内容属原创,转载请注明出处 写在前面的话 最近一直比较纠结,归根结底在于工程的模块化拆分.以前也干过这事,但是一直对以前的结果不满意,这会重操旧业,希望搞出个自己满意的结果. 之前有什么不满意的呢? ...
- 如何根据name和value选中radio [问题点数:40分,结帖人zzxap
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <he ...
- json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1
问题描述:使用Python代码将txt城市列表文件转换为xls文件,源码如下, #!/usr/bin/env Python # coding=utf-8 import os import json i ...
- MessageQueue 相关概念
/** * Implements a thread-local storage, that is, a variable for which each thread * has its own v ...
- Ubuntu中创建Python虚拟环境
创建虚拟环境对于Python开发来说是非常重要的,那么该如何创建虚拟环境呢? 1.安装virtulenv工具和管理包 sudo apt-get install python3-virtulenv 或 ...
- Click to add to Favorites Troubleshooting: High Version Count Issues (Doc ID 296377.1)
Copyright (c) 2018, Oracle. All rights reserved. Oracle Confidential. Click to add to Favorites Trou ...
- Tomcat 9.0 配置问题 403 Access Denied
tomcat9.0 管理页面如:http://10.10.10.10:8080/manager/html出现如下错误: 403 Access Denied 1.需要配置: Tomcat/conf/to ...