线性结构

数据结构--线性结构

时间秒杀一切 提交于 2020-01-31 00:46:17
线性结构 线性结构主要有以下四种: 线性表 栈 队列 栈 每种线性结构都可以用链表或者数组去实现,本身也是属于线性表,个人自学数据结构目前主要用于程序竞赛,所以主要以数组实现为主。 线性表(List) 数据对象集 :n个元素构成的有序序列(a1,a2…an) 操作集 :线性表L∈List,整数i表示位置,元素X∈ElementType,线性表的 基本操作 主要有: 1、List MakeEmpty():初始化一个空线性表L 2、ElementType FindKth( int K, List L ):根据位序K,返回相应元素 3、int Find( ElementType X, List L ):在线性表L中查找X的第一次出现位置 4、void Insert( ElementType X, int i, List L):在位序i前插入一个新元素X 5、void Delete( int i, List L ):删除指定位序i的元素 6、int Length( List L ):返回线性表L的长度n 线性表c++实现(顺序存储) # include <bits/stdc++.h> # define ElementType int # define Maxsize 10000 using namespace std ; typedef struct Node { ElementType

线性代数(5): 线性系统

大憨熊 提交于 2020-01-19 01:08:56
文章目录 1 线性系统与消元法 2 高斯消元法 3 高斯-约旦消元法 4 行最简式和线性方程组解的结构 5 直观理解线性方程组解的结构 6 更一般化的高斯-约旦消元法 7 齐次线性方程组 参考资料 注:转载请标明原文出处链接: https://xiongyiming.blog.csdn.net/article/details/103897231 1 线性系统与消元法 来源: CSDN 作者: TechXYM 链接: https://blog.csdn.net/zaishuiyifangxym/article/details/103897231

数据结构:线性结构之线性表

我们两清 提交于 2020-01-15 18:57:58
就算没有天分,只要你愿意每天花一点时间,做同样一件事情,不知不觉间,你就会走得很远。 什么是线性表? 线性表是n(n>= 0)个元素的有限序列。在表中,元素之间存在这线性的逻辑关系: (1)表中有且仅有一个开始结点; (2)有且仅有一个终端结点; (3)除开始结点外,表中的每一个结点均只有一个前驱结点; (4)除终端结点外,表中的每一个结点均只有一个后继结点; 根据他们之间的关系可以排成一个现线性序列,记作:(a1,a2,...,an) 例如:26个英文字母表(A,B,C,...,X,Y,Z)就是一个线性表 这里的ai(1<=i<=n)属于同一数据对象,具有相同的数据类型。线性表中的数据元素 个数n就是线性表的长度,称作表长,n=0时为空表。i则是数据元素ai的位序。 线性表的存储方式 线性表有两种存储方式:顺序存储和链式存储 (一)顺序表 顺序存储是在内存中用一块地址连续的存储空间按顺序存储线性表的各个数据元素。 采用顺序存储结构的性表称为顺序表,顺序表中逻辑上相邻的数据元素在物理存储位置上也是相邻的。 只要确定了存储线性表的起始位置,线性表中的任意一个数据都可随机存取: 第i个元素的地址为:Loc(ai) = Loc(a1) + size * (i - 1) 其中size是每个元素所占的空间大小。 C语言版的实现 #include <stdio.h> #include

02-线性结构3 Reversing Linked List (25分)

二次信任 提交于 2019-12-20 02:07:38
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6. Input Specification: Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤10 ​5 ​​ ) which is the total number of nodes, and a positive K (≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1. Then N lines

堆和优先队列

有些话、适合烂在心里 提交于 2019-12-18 19:49:05
堆:一个特殊的树 普通队列:先进先出、后进后出 优先队列:出队顺序和入队顺序无关;和优先级有关, 动态 选择优先级高低执行 实现:普通线性结构、顺序线性结构、堆O(logn) 堆的基础结构 二叉堆:(最大堆)完全二叉树,所有节点的值都大于等于其左右子树节点的值 Heapify:将任意数组整理成堆的形状 Replace:取出最大元素,放入一个新元素 来源: CSDN 作者: RecZ.z 链接: https://blog.csdn.net/weixin_43975899/article/details/103357075

02-线性结构3. 求前缀表达式的值(25)

妖精的绣舞 提交于 2019-12-18 18:33:46
02-线性结构3. 求前缀表达式的值(25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。前缀表达式指二元运算符位于两个运算数之前,比如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。 输入格式说明: 输入在一行内给出不超过30个字符的前缀表达式,仅仅包括+、-、*、\以及运算数,不同对象(运算数、运算符号)之间以空格分隔。 输出格式说明: 输出前缀表达式的运算结果。精确到小数点后1位。或错误信息“ERROR”。 例子输入与输出: 序号 输入 输出 1 + + 2 * 3 - 7 4 / 8 4 13.0 2 / -25 + * - 2 3 4 / 8 4 12.5 3 / 5 + * - 2 3 4 / 8 2 ERROR 4 +10.23 10.2 #include <stdio.h> #include <string.h> #include <ctype.h> double parseNum(char *s, int head, int rear) { //分析字符串。返回相应数值 double ret = 0; double flag = 1; //标记数值正负号 if (s[head]

小蚂蚁学习数据结构(8)——线性结构——线性结构复习

痴心易碎 提交于 2019-12-05 02:34:42
线性结构即将告一段落,来个简单总结一下。 连续存储(数组) //定义一个数组结构体 struct Arr { int * pBase; //保存数组的指针 int len; //保存数组的长度 int cnt; //数组元素的有效个数 }; 对数组的操作,主要体现在数据的移动上。比如在插入一个元素和删除一个元素的时候,改位置之后的元素要相对应的前移或后移。结构体内需要三个数组的指针,数组的长度,数组中有效元素的个数,通过这三个参数完成对数组的增添,删除和输出。 离散存储(链表) //创建一个结构体 struct Node { int data; struct Node * pNext; }; 相对于数组来说,链表在存储删除过程更加的灵活,增添元素和删除元素,不再需要对其后的元素进行移动,减少了时间复杂度。创建链表需要多创建一个头指针和头节点,这样方便了对链表的操作。 栈 //节点结构体 typedef struct Node { int data; struct Node * pNext; }NODE,*PNODE; //栈结构体 typedef struct Stack { PNODE pTop; PNODE pBottom; }STACT,*PSTACT; 栈的特性是“先进后出”,所有相对于链表来说,栈的功能受到了限制,比如说不能从中间插入和删除。栈的结构体中有两个元素

oslab oranges 一个操作系统的实现 实验三 认识保护模式(二):分页

Deadly 提交于 2019-12-04 14:29:17
实验目的: 掌握内存分页机制 对应章节: 3.3 实验内容: 1.认真阅读章节资料,掌握什么是分页机制 2. 调试代码,掌握分页机制基本方法与思路 – 代码3.22中,212行---237行,设置断点调试这几个循环,分析究竟在这里做了什么? 3. 掌握PDE,PTE的计算方法 – 动手画一画这个映射图 4. 熟悉如何获取当前系统内存布局的方法 5. 掌握内存地址映射关系的切换 – 画出流程图 6. 基础题:依据实验的代码, – 自定义一个函数,给定一个虚拟地址,能够返回该地址从虚拟地址到物理地址的计算 过程,如果该地址不存在,则返回一个错误提示。 – 完善分页管理功能,补充alloc_pages, free_pages两个函数功能 7. 进阶题(选做) – 设计一个内存管理器,选择其一实现:首次适应算法、最佳适应算法、伙伴算法,要 求实现内存的分配与回收。(提示,均按照页为最小单位进行分配、对于空闲空间管 理可采用位图法或者双向链表法管理) 完成本次实验要思考的问题: 1. 分页和分段有何区别?在本次实验中,段页机制是怎么搭配工作 的? 2. PDE、PTE,是什么?例程中如何进行初始化?CPU是怎样访问 到 PDE、PTE,从而计算出物理地址的? 3. 为什么PageTblBase初始值为2M+4K? 4. 怎么读取本机的实际物理内存信息? 5. 如何进行地址映射与切换? 6.

第一章 线性结构-链表

╄→гoц情女王★ 提交于 2019-12-04 13:27:10
哔哩哔哩数据结构讲解地址: https://space.bilibili.com/356198029 本代码视频讲解地址: https://www.bilibili.com/video/av62370263 #include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node* next;//指向node的指针,指向下一个节点(保存下一个节点的地址) } Node; //初始化 我的实现逻辑就是生成一个结点用来保存链表的头结点 //然后将这个节点的地址返回 这样我们就生成了一个头结点 Node* init() { //分配一个头结点的内存 ,将内存给first Node* first = (Node*)malloc(sizeof(Node)); //初始化这个结点的数据 -1表示头结点 first->data = -1; first->next = NULL; return first;//将这个结点的内存地址返回 } //传入链表的头指针 和要插入的数据 void Add(Node* List,int data) { //将头结点的位置告诉 temp_List Node* temp_List = List; //循环到最后一个地方 while(temp_List->next) temp

数据结构入门-线性结构

蹲街弑〆低调 提交于 2019-12-04 02:13:47
把所有的节点用一根直线串起来 连续存储[数组] 什么叫做数组:元素类型相同,大小相等 重点看代码吧,需要注意的都在注释里,多敲几遍,当然了,有些功能还没有实现,以后再实现 #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // 定义了一个数据类型,这个数据类型的名字叫做struct Arr,有三个成员 struct Arr { int * pBase; // 存储的是数组第一个元素的地址 int len; // 数组所能容纳的最大元素的个数 int cnt; // 当前元素有效元素的个数 }; void init_arr(struct Arr * pArr , int length); bool append_arr(struct Arr * pArr , int val); bool insert_arr(struct Arr * pArr , int pos , int val); //pos值从1开始 bool delete_arr(struct Arr * pArr , int pos , int *pval); // 这个指针用来接收删除的那个值 bool is_empty(struct Arr * pArr ); bool is_full(struct Arr * pArr ); void sort