C的指针疑惑:C和指针17(经典抽象数据类型)
堆栈这种数据最鲜明的特点是:后进先出。
用动态数组实现堆栈:
#include "C17.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h> static STACK_TYPE *stack;
//static size_t stack_size
static int stack_size;
static int top_element = -; void create_stack(int size)
{
assert(stack_size == );
stack_size = size;
stack = (STACK_TYPE *)malloc(stack_size * sizeof(STACK_TYPE));
assert(stack != NULL);
} void destroy_stack(void)
{
assert(stack_size > );
stack_size = ;
free (stack);
stack = NULL;
} void push (STACK_TYPE value)
{
assert(! is_full());
top_element += ;
stack[top_element] = value;
} void pop(void)
{
assert(!is_empty());
top_element -= ;
} STACK_TYPE top(void)
{
assert(!is_empty());
return stack[top_element];
} int is_empty(void)
{
assert(stack_size > );
return top_element == -;
} int is_full(void)
{
assert(stack_size > );
return top_element == stack_size -;
} int main(void)
{
int ret,i;
create_stack();
for(i= ;i<;i++)
{
push(i);
} for(i= ;i<;i++)
{
ret = top();
printf("dynamic data: %d\n",ret);
pop();
}
}
链式堆栈:
#include "C17.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h> #define FALSE 0 typedef struct STACK_NODE
{
STACK_TYPE value;
struct STACK_NODE *next;
}StackNode; static StackNode *stack;
//static int stack_size;
//static int top_element = -1; void create_stack(int size)
{ } void destroy_stack(void)
{
while(!is_empty())
pop();
} void push (STACK_TYPE value)
{
StackNode *new_node;
new_node = (StackNode *)malloc(sizeof(StackNode));
assert(new_node != NULL);
new_node->value = value;
new_node->next = stack;
stack = new_node;
} void pop(void)
{
StackNode *first_node; assert(!is_empty());
first_node =stack;
stack = first_node->next;
free(first_node);
} STACK_TYPE top(void)
{
assert(!is_empty());
return stack->value;
} int is_empty(void)
{
return stack == NULL;
} int is_full(void)
{
return FALSE;
} int main(void)
{
int ret,i;
//create_stack(5);
for(i= ;i<;i++)
{
push(i);
} for(i= ;i<;i++)
{
ret = top();
printf("dynamic data: %d\n",ret);
pop();
}
}
队列:是一种先进先出的结构。需要两个指针:一个指向队头,一个指向队尾。
树:
属性:每个节点的值比它的左子树的所有节点的值都要大,但比它的右子树的所有节点的值都要小。
树的遍历:前序、中序、后序、层次遍历。
前序遍历:检查节点的值->递归遍历左子树和右子树。
中序遍历:遍历左子树->检查当前节点的值->遍历右子树。。
后序遍历:遍历左右子树->检查当前节点的值。
层次遍历:逐层检查树的节点。处理根节点->处理它的孩子->处理它的孙子。
C的指针疑惑:C和指针17(经典抽象数据类型)的更多相关文章
- c语言指针疑惑[转载]
c99的动态数组是在栈上面开辟的,而new出来的是在堆上面开辟的.栈和堆的地址是从两端相向增长的.栈很小,一般只有几十k,vc6好像是64k.堆很大,在win32的虚拟地址空间可以分配到2g的内存.栈 ...
- 指针数组 vs 数组指针
指针数组,故名思义,就是指针的数组,数组的元素是指针: 数组指针,同样,就是直想数组的指针. 简单举例说明: int *p[2]; 首先声明了一个数组,数组的元素是in ...
- [Reprint]C++普通函数指针与成员函数指针实例解析
这篇文章主要介绍了C++普通函数指针与成员函数指针,很重要的知识点,需要的朋友可以参考下 C++的函数指针(function pointer)是通过指向函数的指针间接调用函数.相信很多人对指向一般 ...
- c语言指针函数与函数指针
例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符 *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...
- void指针、NULL指针和未初始化指针
一个指针可以被声明为void类型,比如void *x.一个指针可以被赋值为NULL.一个指针变量声明之后但没有被赋值,叫做未初始化指针. 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组
程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...
- 深入理解指针—>指针函数与函数指针的区别
一. 在学习过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数, ...
- C/C++——二维数组与指针、指针数组、数组指针(行指针)、二级指针的用法
本文转载自:https://blog.csdn.net/qq_33573235/article/details/79530792 1. 二维数组和指针 要用指针处理二维数组,首先要解决从存储的角度对二 ...
- C语言-------指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
随机推荐
- MySQL数据库运维的五大指标
如何评价一个公司数据库运维水平的高低?用什么来进行横向与纵向对比?自动化平台建设的目标是什么?必须有相应的指标体系来指导,此指标体系必须满足以下条件: • 可以用数字来测算和衡量 • 最终指标,而不是 ...
- java程序中输出console的日志到文本
http://blog.sina.com.cn/s/blog_76a8411a01010u2h.html 首先:当我们引入data-integration\lib文件夹下的所有jar包后 运行java ...
- 回文树(回文自动机) - BZOJ 3676 回文串
BZOJ 3676 回文串 Problem's Link: http://www.lydsy.com/JudgeOnline/problem.php?id=3676 Mean: 略 analyse: ...
- 【BZOJ】1671: [Usaco2005 Dec]Knights of Ni 骑士(bfs)
http://www.lydsy.com/JudgeOnline/problem.php?id=1671 从骑士bfs一次,然后从人bfs一次即可. #include <cstdio> # ...
- git把任意代码提交到已存在的github库中
git init git add . git remote add origin 远程urlgit branch --set-upstream-to=origin/mastergit pull --a ...
- 在执行一行代码之前CLR做的68件事[The 68 things the CLR does before executing a single line of your code]
待翻译,原文地址:http://mattwarren.org/2017/02/07/The-68-things-the-CLR-does-before-executing-a-single-line- ...
- DecimalFormat 四舍五入Float类型的坑
今天又踩了一个坑,使用DecimalFormat来完毕四舍五入.可是传入的是float类型,几轮測试才发现一个问题,传入的float会被转为double类型.大家都知道float是4位,double是 ...
- 编程之美 set 15 高效率地安排见面会
题目 有 n 个学生分别对 m 个见面会感兴趣, 为了满足所有学生的要求, HR 希望每个学生都能参加自己感兴趣的所有见面会 思路 1. 假设某一个同学同时对k个小组感兴趣, 那么这k个小组两两之间都 ...
- 在静态工具类中需要注入mapper
在xml中 <bean id="messageUtil" class="org.ldd.ssm.hangyu.utils.MessageUtil" ini ...
- 【BZOJ4873】[Shoi2017]寿司餐厅 最大权闭合图
[BZOJ4873][Shoi2017]寿司餐厅 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每天晚上,这家餐厅都会按顺序提供n种寿司,第i种寿司有一个代号ai和美味度di ...