(4)栈

目录

栈的知识点:

栈的操作:

创建栈:

压栈:

遍历栈:

判断栈是否为空:

出栈

清空栈


这篇笔记是根据郝斌老师的上课讲义整理而得。

栈的知识点:

栈的定义:一种可以实现"先进后出"的存储结构,栈类似于箱子。

栈和堆的主要区别是,内存的分配方式不一样,栈是按照压栈出栈的方式分配内存,实现先进后出的数据结构;堆是按一种叫堆排序的方式分配内存。

栈分为静态栈【内核以数组为存储】和动态栈【内核以链表为存储】。

# 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 clear(PSTACK pS);
void clear(PSTACK pS);

创建栈:

void init(PSTACK pS)
{pS->pTop = (PNODE)malloc(sizeof(NODE));if (NULL == pS->pTop){printf("动态内存分配失败!\n");exit(-1);}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->BottompS->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;elsereturn false;
}

出栈

//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,返回false,否则返回true
bool pop(PSTACK pS, int * pVal)
{if ( empty(pS) ){return false;}else{PNODE r = pS->pTop;*pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;return true;}
}

清空栈

//clear清空
void clear(PSTACK pS)
{if (empty(pS)){return;}else{PNODE p = pS->pTop;PNODE q = NULL;while (p != pS->pBottom){q = p->pNext;free(p);p = q;}pS->pTop = pS->pBottom;}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440047.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LightOJ - 1104】Birthday Paradox(概率,思维)

题干&#xff1a; Sometimes some mathematical results are hard to believe. One of the common problems is the birthday paradox. Suppose you are in a party where there are 23 people including you. What is the probability that at least two people in the party…

爬虫小记

中国商标网 找到正确的入口 在此页面加入全部data数据获取xhr请求包

由浅到深理解ROS(3)-命名空间

全局命名空间&#xff1a; /rosout前面的反斜杠“/”表明该节点名称属于全局命名空间。之所以叫做全局名称因为它们在任何地方&#xff08;包括代码、命令行工具、图形界面工具等的任何地方&#xff09;都可以使用。无论这些名称用作众多命令行工具的参数还是用在节点内部&…

(5)队列

目录 队列知识点&#xff1a; 循环队列&#xff1a; 队列的操作&#xff1a; 创建队列&#xff1a; 判断队列是否已满&#xff1a; 入队&#xff1a; 遍历队列&#xff1a; 判断队列是否为空&#xff1a; 出队&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得&…

【LightOJ - 1038】Race to 1 Again(概率dp,数学期望)

题干&#xff1a; Rimi learned a new thing about integers, which is - any positive integer greater than 1 can be divided by its divisors. So, he is now playing with this property. He selects a number N. And he calls this D. In each turn he randomly choose…

使用matplotlib进行简单的数据展示

import numpy as np import matplotlib.pyplot as plt# 解决中文乱码 plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False # 用来正常显示负号# 建立一个坐标系 plt.subplot(1, 1, 1) # 指明x和y值 x np.array([1, 2…

(6)递归

目录 递归知识点&#xff1a; 递归操作&#xff1a; 阶乘的循环实现&#xff1a; 阶乘的递归实现&#xff1a; 经典的汉诺塔问题&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得。 递归知识点&#xff1a; 定义&#xff1a;一个函数自己直接或间接调用自己 。 …

由浅到深理解ROS(4)

消息和消息类型 节点能相互传递消息&#xff0c;节点之间通信也是基于消息。消息类型也就是数据类型数据类型&#xff0c;理解消息的类型很重要&#xff0c;因为它决定了消息的内容。也就是说&#xff0c;一个话题的消息类型能告诉你该话题中每个消息携带了哪些信息&#xff0…

【CodeForces - 1197C】Array Splitting(水题)

题干&#xff1a; You are given a sorted array a1,a2,…,ana1,a2,…,an (for each index i>1i>1 condition ai≥ai−1ai≥ai−1holds) and an integer kk. You are asked to divide this array into kk non-empty consecutive subarrays. Every element in the array…

Django项目部署在Centos7

把Django项目部署在Centos7下 先有一个Django项目 一个员工管理系统&#xff08;ems&#xff09; 员工管理系统 使用VMware创建一个虚拟的Linux系统 Centos7下安装MySql5.7 详细安装 Centos7下安装Python3.5 详细安装 Centos7下安装Django2.0.6 - 安装数据库驱动&#xf…

(7)树

目录 树的知识点&#xff1a; 定义&#xff1a; 专业术语&#xff1a; 操作(重点): 树的操作&#xff1a; 创建二叉树&#xff1a; 先序遍历&#xff1a; 中序遍历&#xff1a; 后序遍历&#xff1a; 这篇笔记是根据郝斌老师的上课讲义整理而得。 树的知识点&#xf…

由浅到深理解ROS(5)- launch启动文件的理解与编写

ROS提供了一个同时启动节点管理器&#xff08;master&#xff09;和多个节点的途径&#xff0c;即使用启动文件&#xff08;launch file&#xff09;。事实上&#xff0c;在ROS功能包中&#xff0c;启动文件的使用是非常普遍的。任何包含两个或两个以上节点的系统都可以利用启动…

【CodeForces - 1199C】MP3(思维,离散化)

题干&#xff1a; One common way of digitalizing sound is to record sound intensity at particular time moments. For each time moment intensity is recorded as a non-negative integer. Thus we can represent a sound file as an array of nn non-negative integers…

Centos7下安装MySql

1、安装方式 1.1 方式一 yum安装&#xff08;推荐使用该方式&#xff09; 在CentOS中默认安装有MariaDB&#xff0c;这个是MySQL的分支 如果必须要安装MySQL&#xff0c;首先必须添加mysql社区repo通过输入命令&#xff1a; rpm -ivh http://dev.mysql.com/get/mysql-commu…

(8)排序

排序&#xff1a; 排序和查找的关系&#xff1a;排序是查找的前提&#xff0c;排序是重点。 冒泡 插入 选择 归并排序 快速排序&#xff1a;一次确定一个数的位置 #include <stdio.h>void QuickSort(int *a, int low, int high) {int pos;if(low < high){pos FindP…

由浅到深理解ROS(6)-坐标转换

转自 ROS 中对于多坐标系的处理是使用树型表示&#xff0c;在机器人自主导航中&#xff0c;ROS会构建这几个很重要的坐标系&#xff1a; base_link: 一般位于tf tree的最根部&#xff0c;物理语义原点一般为表示机器人中心&#xff0c;为相对机器人的本体的坐标系。(base_foot…

Centos7下安装Python3.5

1、安装依赖 - yum -y install python-devel openssl-devel bzip2-devel zlib-devel expat-devel ncurses-devel sqlite-devel gdbm-devel xz-devel tk-devel readline-devel gcc - yum -y groupinstall "Development tools"如上两步&#xff0c;汇总安装了p…

【BZOJ - 3450】Tyvj1952 Easy(数学期望,期望的线性性)

题干&#xff1a; 某一天WJMZBMR在打osu~~~但是他太弱逼了&#xff0c;有些地方完全靠运气:( 我们来简化一下这个游戏的规则 有n次点击要做&#xff0c;成功了就是o&#xff0c;失败了就是x&#xff0c;分数是按comb计算的&#xff0c;连续a个comb就有a*a分&#xff0c;comb就…

吐血推荐收藏的学位论文排版教程(完整版)

目录 01.保存的高级选项设置 02.纸张设置为A4纸大小 03.设置页边距和装订线距离 04.度量衡的设置 05.创建“论文正文”样式 06.修改论文正文样式 07.设置并修改标题样式 08.给中英文摘要、附录、等大标题套用样式 09.两个Word文档之间进行并排查看 12.一键生成多级列…

由浅到深理解ROS(7)-URDF

转自 相信许多爱好者止步于昂贵的机器人价格。虽然有了Arduino&#xff0c;但一个载重能力很弱的机器人小车成本也得一两百块钱。搭建自己的机器人更是费时费力。 所以如果你只是普通机器人爱好者&#xff0c;或者还没想好要拿机器人做什么&#xff0c;那我们还是从模拟器开始…