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.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
随机推荐
- Spring mvc 返回JSON 在IE 下提示下载 解决办法
http://www.blogjava.net/iamlibo/archive/2013/11/21/406646.html ————————————————————————————————————— ...
- 数论 + 容斥 - HDU 4059 The Boss on Mars
The Boss on Mars Problem's Link Mean: 给定一个整数n,求1~n中所有与n互质的数的四次方的和.(1<=n<=1e8) analyse: 看似简单,倘若 ...
- 哪一个不是EL定义的隐式对象?(选择1项)
哪一个不是EL定义的隐式对象?(选择1项) A cookie B.pageContext C.attributes D initParam 解答:C 1)pageContext:JSP 页的上下文.它 ...
- JavaScript有关的10个怪癖和秘密(转)
数据类型和定义 -------------------------------------------------------------------------------------------- ...
- 【BZOJ】1645: [Usaco2007 Open]City Horizon 城市地平线(线段树+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=1645 这题的方法很奇妙啊...一开始我打了一个“离散”后的线段树.............果然爆了. ...
- WPF XAML 特殊字符(小于号、大于号、引号、&符号)
XAML 受限于 XML 规则.例如, XML 特别关注一些特殊字符,如 & < > 如果试图使用这些字符设置一个元素内容,将会遇到许多麻烦,因为 XAML 解析器认为您正在做其 ...
- Android之布局属性归纳
第一类:属性值为true或falseandroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layou ...
- hdu4525
可以发现天的操作相当于*(k1+k2) 然后就很好判断了. 威威猫系列故事——吃鸡腿 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 6 ...
- [Android] 开源框架 Volley 自定义 Request
今天在看Volley demo (https://github.com/smanikandan14/Volley-demo), 发现自定义GsonRequest那块代码不全, 在这里贴一个全的. pu ...
- 【BZOJ4244】邮戳拉力赛 DP
[BZOJ4244]邮戳拉力赛 Description IOI铁路是由N+2个站点构成的直线线路.这条线路的车站从某一端的车站开始顺次标号为0...N+1. 这条路线上行驶的电车分为上行电车和下行电车 ...