数据结构
文章平均质量分 60
数据结构
高灿子
这个作者很懒,什么都没留下…
展开
-
简单排序、堆排序
二、选择排序(1)主要思想(2)代码实现#include <stdio.h>#include <assert.h>#include <stdlib.h>void SelectSort(int arr[], int len){ int minindex; //记录最小数的下标 int tmp = 0; for (int i = 0; i < len; i++) { int minindex = i; for (int j =原创 2021-05-27 10:26:57 · 61 阅读 · 0 评论 -
朴素算法、冒泡排序
一、朴素算法朴素算法也叫字符串匹配算法,它主要是在主串中查找和子串相同的串,并返回从查找位置开始的相同串首的一种算法。eg1:主串:“sdjfklashguiew”,子串:“shgui”朴素算法可以在主串中找到shgui,并且返回s字母所在位置6(下标从0开始)。eg2:主串:“abcdef”,子串:“gthjj”没有找到子串,就打印出没找到字符。(1)主要思想从主串中第一个元素开始比较,元素相同接着往下比较,元素不同从主串第二个元素开始重新开始比较。(2)代码实现#include&原创 2021-05-26 20:26:11 · 784 阅读 · 0 评论 -
二路归并算法
二路归并1.基本思想2.举例说明3.方法实现4.性能分析1.基本思想二路归并排序就是将两个有序子表归并成一个有序表,归并排序是“分治法”的一个非常典型的应用,同时它也是递归算法的一个好的实例。它将问题分成一些小的问题然后递归求解,而治就是把分阶段的答案拼起来。假如给定一组整型数字需要排序,二路归并就是将所有数据一个一个看做单独的组,相邻两组进行排序合并。2.举例说明3.方法实现#include <stdio.h>#include <assert.h>#inclu原创 2021-05-23 11:43:30 · 2190 阅读 · 0 评论 -
直接插入排序、希尔排序
一、朴素算法朴素算法也叫字符串匹配算法,它主要是在主串中查找和子串相同的串,并返回从查找位置开始的相同串首的一种算法。eg1:主串:“sdjfklashguiew”,子串:“shgui”朴素算法可以在主串中找到shgui,并且返回s字母所在位置6(下标从0开始)。eg2:主串:“abcdef”,子串:“gthjj”没有找到子串,就打印出没找到字符。(1)主要思想从主串中第一个元素开始比较,元素相同接着往下比较,元素不同从主串第二个元素开始重新开始比较。(2)代码实现#include&原创 2021-05-21 10:48:03 · 73 阅读 · 0 评论 -
两个队列实现一个栈
两个栈实现一个队列1.主要思想2.结构设计3.基本操作(1)初始化(2)入栈(3)获取栈顶第一个元素的值,但不删除(4)获取栈顶第一个元素的值并删除(5)判空(6)判满(7)获取队列有效元素个数(8)清空(9)销毁4.完整代码1.主要思想栈的特点:先进后出。队列的特点:先进先出。我们在用两个队列实现栈的时候是用顺序队列。2.结构设计既然是用两个队列实现栈的操作,所以定义的结构体中的成员就是两个队列。typedef struct{ SqQueue q1; SqQueue q2;}TQSt原创 2021-05-15 19:53:40 · 2831 阅读 · 0 评论 -
两个栈实现一个队列
一、两个栈实现一个队列1.主要思想栈的特点:先进后出。队列的特点:先进先出。我们在用两个栈实现队列的时候是用顺序栈,链栈本身就是可以实现先进先出的,只不过时间复杂度为O(n).2.结构设计既然是用两个栈实现队列操作,所以定义的结构体中的成员就是两个栈。typedef struct TSQueue{ Stack s1; Stack s2;}TSQueue, *PTSQueue;3.基本操作我们要实现的是一个对列,所以所有的操作都是基于队列的基础上,队列有什么操作,我们实现的就有什原创 2021-05-13 18:06:12 · 1129 阅读 · 0 评论 -
链式队列
一、什么是队列?队列是一种先进先出FIFO的一种线性结构,也有链式和顺序之分。入队的一端称为队尾,出队的一端称为对头。1.链式队列的设计typedef struct Node{ int data;//数据域,没存放节点的值 struct Node* next;//指针域,存放下一个节点的地址}Node, * PNode;//重新设计的头结点typedef struct LQueue{ struct Node* prior;//指向头结点; struct Node* tail原创 2021-05-12 19:47:06 · 286 阅读 · 0 评论 -
顺序队列
什么是队列?队列是一种先进先出FIFO的数据结构,也是一种受到限制的顺序表。类比:排队买饭原创 2021-05-09 20:00:44 · 120 阅读 · 1 评论 -
链栈
链栈利用带头结点的单链表实现。栈顶:入栈和出栈的操作都在栈顶,链栈栈顶在表头(根据时间复杂度确定的,都是O(1))。链栈的设计typedef struct LSNode{ int data; struct LSNode* next;//类似单链表的设计界结构;}LSNode,*PLStack;//因为栈顶在表头,所以不需要top指针,表头的后面就是栈顶;链栈的基本操作初始化void InitStack(PLStack ps){ assert(ps != NULL); if原创 2021-05-08 20:49:37 · 548 阅读 · 0 评论 -
顺序栈
栈的定义栈是限定仅在表尾进行插入或删除操作的线性表。因此,对栈来说,表尾端有其特殊含义,成为栈顶,相应的,表头成为栈底。不含元素的栈成为空栈。顺序栈的操作栈是一种先进后出,后进先出的数据结构。(访问受限)对于栈的操作都是从栈顶开始操作,即插入删除都是从栈顶开始操作。顺序栈设计typedef struct Stack{ int* base; //用来申请动态内存; int stackSize; //当前栈总体个数; int top; //栈顶指针,实际为下原创 2021-05-07 14:36:18 · 130 阅读 · 0 评论 -
双向链表
双向链表特点:有两个指针域,一个指向直接前驱,一个指向直接后继。双向链表的设计因为链表能够双向移动,所以得有两个指针域。typedef int ELEMTYPE;typedef struct DNode{ ELEMTYPE data; //数据域 DNode* next; //指向直接后继 DNode* prior; //指向直接前驱}DNode, * Dlist; //Dlist == DNode*双向链表的基本操作初始化原创 2021-05-05 19:52:58 · 297 阅读 · 0 评论 -
循环链表
循环链表循环链表的特点:循环链表是将表中最后一个结点的指针域指向头结点,整个链表形成一个环,所以表中任意结点出发均能找到表中其他结点。循环链表和单链表的区别:循环链表尾结点的next不在指向nullptr,而是指向头结点(不是第一个结点)。循环链表的设计循环链表和单链表的基本操作都是类似的,单链表结构体成员和循环链表结构体成员也是相同的。typedef int ELEMTYPE;typedef struct CNode{ ELEMTYPE data; //数据域原创 2021-05-05 17:17:46 · 4471 阅读 · 2 评论 -
单链表:头结点和头指针的实现方式
链式存储是什么样的结构?链式存储结构的特点使用任意的存储单元存储线性表的数据元素,存储单元可以使连续的也可以是不连续的,因此,为了表示每个数据元素和下一个元素的关系,除了存储本身的信息之外,还需要存储下一个元素的位置信息,将两部分信息组成的存储映像叫结点。它包括两个域,即数据域和指针域。单链表有两种:带头结点的单链表,带头指针的单链表。带头结点的单链表结点的定义定义结点时,头结点的数据域用于记录链表的长度。typedef struct Node{ union /原创 2021-04-22 18:37:33 · 878 阅读 · 0 评论 -
顺序表
线性结构:顺序结构:在逻辑上是连续的,在物理存储上也是连续的;链式结构:在逻辑上是连续的,在物理存储上是不连续的;什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储线性表的数据元素。顺序表的基本构成注意:顺序表在存储时,必须从起始位置开始存储并且连续存储(和数组的很大的区别)。顺序表的c语言结构设计#define DEFAULTSIZE 10typedef int ElemType;typedef struct SqList{ ElemType *data; //原创 2021-04-16 23:25:59 · 137 阅读 · 0 评论