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.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...
随机推荐
- 高精度 - SGU 112 a^b-b^a
a^b-b^a Problem's Link Mean: 略 analyse: 简单题,只用编个高精度乘法和减法即可. Time complexity: O(N) view code java im ...
- [android] AndroidManifest.xml【 manifest -> uses-permission】
在 API Level 1 时被引入 简介: 在某些情况下,你为app设置的权限将会影响到google应用商店会用何种规则来过滤你的APP. 如果你需要一个硬件相关的权限——CAMERA,googl ...
- 关于Cocos2d-x中自定义的调用注意事项
1.在实例类Student.h中定义一个自己的方法 public: int getSno(); 2.在实例类Student.cpp中实现这个方法 int Student::getSno(){ retu ...
- MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得。
MVC已经是现代Web开发中的一个很重要的部分,下面介绍一下Spring MVC的一些使用心得. 之前的项目比较简单,多是用JSP .Servlet + JDBC 直接搞定,在项目中尝试用 Strut ...
- web 前端 转盘界面
http://www.cnblogs.com/arfeizhang/p/turntable.html "如果有个做转盘的需求,你准备怎么做?设计师只会提供一个转盘的图片,其余都需要你完成,不 ...
- 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1009 好神的题orzzzzzzzzzz 首先我是连递推方程都想不出的人...一直想用组合来搞..看来 ...
- 要立刷金组flag了T_T
刷了那么多银组,发现自己好多不会啊... 果然太弱 在这感谢hzwer神犇的blog.. 大部分题解都从黄学长这里来orz. orz.... 果然我太水
- HTTP报文-->MVC
引用 学习Web开发不好好学习HTTP报文,将会“打拳不练功,到老一场空”,你花在犯迷糊上的时间比你沉下心来学习HTTP的时间肯定会多很多. HTTP请求报文解剖 HTTP请求报文由3部分组成(请求行 ...
- MP 及OMP算法解析
转载自http://blog.csdn.net/pi9nc/article/details/18655239 1,MP算法[盗用2] MP算法是一种贪心算法(greedy),每次迭代选取与当前样本残差 ...
- 如何使用github,简单教程
前期准备:先行设置SSH KEY(请看我之前发的关于设置添加SSH的文章) 直接上命令: clone 已有仓库到身边的开发环境中 git clone git@github.com:<yourna ...