
基于c的数据结构
学习笔记
e^iπ 1=0
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
串匹配:BF朴素查找算法和KMP算法实现推导
KMP算法过程:在匹配过程中,若失配,i不回退原创 2020-06-06 22:23:04 · 211 阅读 · 0 评论 -
队列的基本操作
队列: 先进先出结构限定性数据结构的双端队列:输出受限的双端队列: 一个端点允许插入和删除,另一个端点只允许插入的双端队列输入受限的双端队列: 一个端点允许插入和删除,另一个端点只允许删除的双端队列head=rear 队空(read+1)%size=head 队满队列实现头文件:typedef int ElemType;#define MAXQSIZE 10typedef struct Queue{ ElemType *base; int head; int原创 2020-06-05 18:58:10 · 244 阅读 · 0 评论 -
排序算法---直接插入排序
直接插入算法基本思想: 是将一个记录插入到已经排好序的有序表中,从而构成一个新的、记录数增1的有序表。(本文由小到大进行排序)评价算法的三个指标: 时间复杂度、空间复杂度、稳定性稳定性判断: 在待排序列中存在两个或两个以上的关键字,它们在使用排序算法前后的顺序保持不变,则算法稳定,否则,算法不稳定。例如:在排序前a[2]=7,a[3]=7,排序后:a[2]的7还是在a[3]的7前面,虽然排序后两个7的位置可能发生变化,但是顺序不发生变化。算法实现实现1(不是最优):使用双层循环结构,第一层循环主原创 2020-06-05 18:39:09 · 201 阅读 · 0 评论 -
不带头结点的单循环链表
创建头文件nlist.h#pragma once//不带头节点的链表,主要应用在循环链表中,其缺点,操作复杂(会出现二级指针),//优点:灵活(头指针指向哪个节点哪个节点就是第一个节点)//不带头节点的单链循环链表,尾节点的next指向第一个节点typedef struct NNode{ int data;//数据 struct NNode *next;//下一个节点的地址}NNode,*PNList;//初始化函数,将头指针置NULL,会出现二级指针void InitList(P原创 2020-05-19 22:29:21 · 2421 阅读 · 0 评论 -
链栈的入栈、出栈、获取长度、获取栈顶值等相关操作
创建lstack.h#pragma once//链式栈:利用带头节点的单链表实现//栈顶为第一个数据结点,因为:头插O(1),头删:O(1),有尾指针的的尾插:O(1),有尾指针的尾删O(n)typedef struct SNode{ int data; struct SNode *next;}SNode,*PLStack;//注意:链式栈不需要top,因为头结点的next即为top//初始化栈void InitStack(PLStack ps);//入栈bool Push(P原创 2020-05-18 16:05:35 · 3148 阅读 · 0 评论 -
栈的入栈,出栈,扩容,获取长度等操作
创建stack.h#pragma once//栈:一种访问受限的线性表,只能在一端进行数据操作,能操作//顺序栈,栈顶设计在顺序表的表尾处,因为顺序表尾插和尾删都是O(1)#define INIT_SIZE 10typedef struct SeqStack{ int *elem;//保存动态内存的地址,用于存放栈数据 int top;//栈顶指针,当前可以存放数据的下标,类似顺序表的有效数据个数 int stacksize;//栈容量}SeqStack,*PSeqStack;/原创 2020-05-18 16:01:31 · 1827 阅读 · 0 评论 -
静态链表的增,删,清空,销毁等操作
创建slinklist.h文件#pragma once//静态链表:利用顺序表模拟链表操作,包含两条带头循环链表//一条为有效数据链表,头结点为0下标;一条为空闲链表,头结点为1下标#define MAXSIZE 10typedef struct SNode{ int data;//数据 int next;//后继指针,其实为后继节点的下标}SNode,SLinkList[MAXSIZE],*PSLinkList;//typedef SNode SLinkList[MAXSIZE];原创 2020-05-18 15:54:01 · 486 阅读 · 0 评论 -
带头节点的不循环单链表相关操作
创建list.h头文件#pragma once//头结点:开头标识,类似旗帜,不存放数据,不参与运算//数据结点:存放数据typedef struct Node{ int data; struct Node *next;}Node,*pList;//初始化void InitSeqList(pList plist);//头插bool Insert_head(pList plist,int val);//尾插bool Insert_tail(pList plist,int va原创 2020-05-10 13:36:06 · 235 阅读 · 0 评论 -
不定长顺序表插入、删除等相关操作
创建头文件Seqlist.h#pragma once//防止头文件被重复引用#define INIT_SIZE 10typedef struct DSeqList{ int *elem;//指向动态创建的内存,用于存储数据 int length;//有效数据个数 int listsize;//总容量(总格子数)}DSeqList,*PDSeqList;//初始化void InitSeqList(PDSeqList plist);//获取数据长度int GetLength(PD原创 2020-05-10 13:20:58 · 188 阅读 · 0 评论 -
定长顺序表的相关操作
创建头文件list.h#pragma once //防止头文件被重复使用//头文件:存放数据的定义和函数声明#define SIZE 10typedef struct SeqList{ int elem[SIZE]; int length;//有效数据的个数}SquList,*PSeqList;//typedef SeqList * PSeqList;//初始化//void InitSeqList(SeqList *plist);void InitSeqList(PSeqLis原创 2020-05-10 13:02:20 · 123 阅读 · 0 评论 -
带头节点的单循环链表的插入、删除、查找等操作
建立头结点#pragma oncetypedef struct CNode{ int data; struct CNode *next;}CNode,*Clist;//CNode*==Clist//初始化函数void InitList(Clist plist);//头插bool Insert_head(Clist plist,int val);//尾插bool Insert_tail(Clist plist,int val);//在plist中查找关键字key,找到返回结点原创 2020-05-10 10:30:47 · 1436 阅读 · 0 评论 -
双向不循环链表插入、删除、查询等操作
首先创建头文件#pragma oncetypedef struct DNode{ int data; struct DNode *next;//后继指针 struct DNode *ptior;//前驱指针}DNode,*DList;原创 2020-05-10 10:13:29 · 195 阅读 · 0 评论