C的指针疑惑:C和指针17(经典抽象数据类型)
生活随笔
收集整理的這篇文章主要介紹了
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 = -1;void create_stack(int size) {assert(stack_size == 0);stack_size = size;stack = (STACK_TYPE *)malloc(stack_size * sizeof(STACK_TYPE));assert(stack != NULL); }void destroy_stack(void) {assert(stack_size > 0);stack_size = 0;free (stack);stack = NULL; }void push (STACK_TYPE value) {assert(! is_full());top_element += 1;stack[top_element] = value; }void pop(void) {assert(!is_empty());top_element -= 1; }STACK_TYPE top(void) {assert(!is_empty());return stack[top_element]; }int is_empty(void) {assert(stack_size > 0);return top_element == -1; }int is_full(void) {assert(stack_size > 0);return top_element == stack_size -1; }int main(void) {int ret,i;create_stack(5);for(i= 0;i<5;i++){push(i);}for(i= 0;i<5;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 0typedef 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= 0;i<5;i++){push(i);}for(i= 0;i<5;i++){ret = top();printf("dynamic data: %d\n",ret);pop();} }?
隊列:是一種先進先出的結構。需要兩個指針:一個指向隊頭,一個指向隊尾。
?
樹:
屬性:每個節點的值比它的左子樹的所有節點的值都要大,但比它的右子樹的所有節點的值都要小。
樹的遍歷:前序、中序、后序、層次遍歷。
前序遍歷:檢查節點的值->遞歸遍歷左子樹和右子樹。
中序遍歷:遍歷左子樹->檢查當前節點的值->遍歷右子樹。。
后序遍歷:遍歷左右子樹->檢查當前節點的值。
層次遍歷:逐層檢查樹的節點。處理根節點->處理它的孩子->處理它的孫子。
?
轉載于:https://www.cnblogs.com/Caden-liu8888/p/6607647.html
總結
以上是生活随笔為你收集整理的C的指针疑惑:C和指针17(经典抽象数据类型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自旋锁的原理及使用
- 下一篇: 时序分析 43 -- 时序数据转为空间数