
C语言数据结构和算法
主要写了一些数据结构的内容
IT自习小空间
写好每个代码!
展开
-
数据结构-双向循环链表的尾插尾删 具体位置插入和删除操作
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。直接上代码下面是DouLsit.h#pragma once#include <stdio.h>#include <assert.h>#include <stdlib.h>typedef int DataType;typedef struct ListN.原创 2021-02-08 22:42:33 · 1665 阅读 · 0 评论 -
数据结构-C语言单链表的实现-尾插尾删头插头删
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象)指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。下面代码包括尾插尾删 头插头删 任意位置插入和删除 查找 打印 释放不啰嗦直接上代码下面是SinList.h#pragma once#include <stdio.h>#include <malloc.h>#include .原创 2021-02-07 20:48:10 · 491 阅读 · 0 评论 -
递归斐波那契数列和汉诺塔
递归程序调用自身的编程技巧称为递归在高级语言中,函数调用自己和调用其他函数并没有本质的不同。我们把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数斐波那契数列指的是这样一个数列:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNzoOCXp-1607230920088)(https://bkimg.cdn.bcebos.com/formula/791a16929ce9804e0900f0f5bf495f7e.svg)]这个数列从第3项开始原创 2020-12-06 13:03:42 · 147 阅读 · 0 评论 -
栈和队列的顺序和链式存储结构
栈和队列栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的顺序存储结构typedef struct{ ElemType *base; // 指向栈底的指针变量 ElemType *top; // 指向栈顶的原创 2020-12-04 13:58:29 · 2505 阅读 · 1 评论 -
循环链表插入和删除
循环链表将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表。单链表判断空链表为head->next 而循环链表判断空链表为head->next 是否等于head时间复杂度由于终端结点用尾指针rear指示,则查找终端结点是O(1),而开始结点是rear->next->next,当然也是O(1)初始化循环链表void ds_init(node **pNode){ int item; n原创 2020-11-30 10:48:40 · 3108 阅读 · 0 评论 -
静态链表的插入和删除操作
静态链表用数组描述的链表叫静态链表,这种描述方法叫做游标实现法。线性表的静态链表存储结构#define MAXSIZE 1000typedef struct{ ElemType data; // 数据 int cur; // 游标}Component, StaticLinkList[MAXSIZE];对静态链表进行初始化相当于初始化数组Status IninList(StaticLinkList spasce){ int i; for(i=原创 2020-11-28 17:25:21 · 2317 阅读 · 0 评论 -
单链表的整体创建和删除
单链表的整表创建单链表整表创建的算法思路1、声明一个结点node和计数器变量i2、初始化一空链表L3、让L的头结点的指针指向NULL,即建立一个带头结点的单链表4、循环实现后继结点的赋值和插入头插法建立单链表头插法从一个空表开始,生成新结点,读取数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到结束为止。下面是实现代码void CreateListHead(LinkList *L, int n){ LinkList node; int i;原创 2020-11-28 11:08:57 · 579 阅读 · 0 评论 -
线性表之顺序存储和链式存储结构
线性表线性表:由零个或多个数据元素组成的有限序列线性表有两种物理存储结构:顺序存储结构和链式存储结构线性表插入操作插入算法的思路:1、如果插入位置不合理,抛出异常2、如果线性表长度大于等于数组长度,则抛出异常或动态增加数组容量3、从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置4、将要插入元素填入位置i处5、线性表长+1下面是实现代码Status ListInsert(SqList *L, int i, ElemType e){ int k;原创 2020-11-27 11:36:34 · 8052 阅读 · 2 评论 -
算法时间复杂度和空间复杂度简介
一、数据结构数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。物理结构:是指数据的逻辑结构在计算机中的存储形式。顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。二、算法算法:一个计算过程,解决问题的方法算法的特性:输入、输出、原创 2020-11-26 15:49:35 · 252 阅读 · 0 评论