
数据结构
数据结构
丽丽的代码
这个作者很懒,什么都没留下…
展开
-
时间复杂度,空间复杂度,固定大小的顺序表,不固定的顺序表
一,时间复杂度:程序执行的次数时间复杂度的计算1,只看最高规模的;2,省略其系数;二,常见时间复杂度:O(1)没有循环或者循环只执行一次O(n)循环语句与问题规模之间存在关系并且控制循环变量每次以++或者–的方式来执行;O(n^2)循环嵌套;O(log2 n)有循环并且控制循环的的变量以*2或者/2的方式出现;for(int i=0;i<n;i*2){ int a=i;}三,空间复杂度的定义:所需的额外存储空间(除了函数本身计算申请的内存空间)与问题规模之间的关系;例如原创 2021-11-12 20:14:36 · 355 阅读 · 0 评论 -
冒泡排序,选择排序,不使用第三方变量来交换两个数的BUG
冒泡排序选择排序原创 2021-11-04 10:01:58 · 245 阅读 · 0 评论 -
打印不带头结点的单链表的倒数第k个结点的数据,返回不带头节点的中间节点的数据
一,打印不带头结点的单链表的倒数第K个节点的数据1,链表长度法void Printf_list_k1(Listnode*plist,int k){ assert(plist!=nullptr); int n = 0; Listnode* s = plist; while (s != nullptr) { n++; s = s->next; } if (k<= 0 || k > n) exit(0); while (n>k) { n--; s =原创 2021-10-28 11:15:28 · 211 阅读 · 0 评论 -
带有头节点单链表,带有头节点单链表逆置的四种方法
带头结点的单链表链式存储结构:逻辑上相邻的数据元素,并不要求物理上也相邻;单链表的代码实现.h文件在这里插入代码片.cpp文件在这里插入代码片单链表逆置的四种做法1,三个指针的方法2,两个指针的头插法3,用一个栈来帮助你来实现时间复杂度O(n)即动态的开辟一个数组来充当栈的先进后出功能(数组的大小和单链表的有效节点个数相同)4,递归来实现有头结点的单链表逆置无头结点的单链表逆置打印不带头结点的单链表的倒数第K个节点的数据链表长度法利用一个栈来实现递归来实现双指针原创 2021-10-27 17:09:50 · 2458 阅读 · 0 评论 -
时间复杂程度,空间复杂程度,线性表的相关习题
**时间复杂程度:**执行当前算法所消耗的时间;**空间复杂程度:**执行当前算法所消耗的内存空间;答案:10#include<stdio.h>#include<assert.h>#include<stdlib.h>#include<string.h>#include"Seqlist.h"int Compare(Seqlist*a,Seqlist*b){ assert(a != nullptr && b != null原创 2021-10-21 10:04:52 · 100 阅读 · 0 评论 -
合并线性表Lb到La中,找到数组中重复的数字
1,合并线性表La到Lb中#include<stdio.h>#include<assert.h>#include<stdlib.h>#include"Seqlist.h"void unio(Seqlist*la,Seqlist*lb){ assert(la!=nullptr&&lb!=nullptr); int n = lb->cursize; for (int i = 0; i < n; i++) { if (!Loc原创 2021-10-20 11:16:48 · 273 阅读 · 0 评论 -
数组的旋转的4种方法
数组向右旋转的四种方法;在这里向右移动三位位例1,基本方法向右移动一次然后循环2,开辟一个新的空间#include<stdio.h>#include<assert.h>#include<stdlib.h>#include"Seqlist.h"void Show_arr(int *a,int n){ assert(a!=nullptr); for (int i = 0; i < n; i++) { printf("%d ",a[i]);原创 2021-10-18 23:40:08 · 679 阅读 · 0 评论 -
可扩容的顺序表,将两个顺序表合并
#include<stdio.h>#include<assert.h>#include<stdlib.h>#define SIZE 10//初始大小#define MULTIPLE 2//扩容的倍数typedef int Elemtype;typedef struct Seqlist{ Elemtype* data; Elemtype capacity; Elemtype cursize;}Seqlist;void Init(Seqlist*原创 2021-10-18 16:58:45 · 151 阅读 · 1 评论 -
两个栈实现一个队,两个队实现一个栈
1,用两个栈实现一个队列头文件#pragma once#include"lstack.h"typedef struct Ptstsatck{ Lstack* s1; Lstack* s2;}Psts,*Qpsts;//初始化 void my_Init(Psts*psplist);//移动函数(将栈1内容移至栈2)void Move(Lstack* p1, Lstack* p2);// 入队bool my_Push(Psts*psplist, Elemtype val);//出原创 2021-10-15 17:16:38 · 116 阅读 · 0 评论 -
顺序表实现队列,链式队
队:先进先出;1,顺序表队:(空出一位来判满)循环顺序表tail进数据front 出数据;tail插入front删除头文件#pragma oncetypedef int Elemtype;typedef struct Queue{ Elemtype* base; int front; int tail;}Queue,*Pqueue;////初始化 void Init(Queue* plist);// 入队tail入队bool Push(Queue*plist,Elemty原创 2021-10-13 13:24:20 · 95 阅读 · 0 评论 -
顺序栈,链表栈
栈符合先进后出的原则;顺序栈顺序表的尾插头删;链表栈单链表的头插头删;一,顺序栈#pragma oncetypedef int Elemtype;//顺序表的尾插形成了顺序栈typedef struct Stack{ Elemtype* base; int top; int stacksize;}Stack,*Pstack;//初始化函数(相当于顺序表的尾插)void Init(Stack*plist);//入栈bool Push(Stack* plist,Elemtype原创 2021-10-12 15:18:49 · 130 阅读 · 0 评论 -
2021-08-25基础数据结构
1,基础数据结构时间复杂度空间复杂度2,线性表(顺序表和链表)3,顺序表(定长的和扩容的)4,单链表(带结点的和不带头节点的) 大量的面试题5,栈(顺序表链表)6,队列(顺序表链表)7,串(顺序表和链表) 字符串的查找(BF KMP)8,哈希9,双向链表,循环链表,双向循环链表算法:八大排序算法1, 冒泡排序2,二路归并排序3,直接插入排序4,希尔排序5,堆排序6,基数排序7,快速排序8,选择排序)...原创 2021-08-25 09:58:50 · 77 阅读 · 0 评论