顺序表

数据结构&算法入门

匿名 (未验证) 提交于 2019-12-03 00:22:01
数据结构是存储,组织 数据 的 方式 算法是完成一个目标的 方法 和 ˼· 公司的核心价值点起始与数据,数据可以预判趋势,指导方向,解决实际问题,掌握了公司的数据,就掌握了公司运营和发展的命脉 是做技术的基础中的基础,是高技术人才的必备能力 装逼利器 什么是数据结构,什么是算法,他们之间的关系,抽象数据类型 数据结构: 数据组织的方式 数据的种类有很多种:整型,浮点型,字符串。。。 数据的组织方式:字典,列表,元组。。。 举例子:数据:‘老王’ 10 ‘男’ 组织方式:列表:[‘老王’,10, ‘男’], 字典{name:’老王’,age:18,gender:’男’} 物理形式 顺序表 链表 逻辑形式 集合,线性,树形,图型 算法 解决问题的方法和思路 公司的核心是 数据 ,数据的组织方式是数据结构,怎么利用这些数据结构完成公司的业务需求,就用到了算法 评判算法的好坏的标准:算法复杂度 时间复杂度:完成一个目标所花费的时间 空间复杂度:完成一个目标所花费的内存空间 数据结构+算法 == 程序,也就是业务需求 程序 + 语言 == 编程 抽象数据类型就是将数据和在这个数据上的运算捆绑在一起。 如魂斗罗中的人物是一种数据类型,打子弹是动作,点击空格键使人物发子弹,那么按一下空格键就生成了一个 抽象数据类型:人物打子弹 为什么引入抽象数据类型的概念

6-1 顺序表操作集(20 分)

匿名 (未验证) 提交于 2019-12-03 00:21:02
本题要求实现顺序表的操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中 List 结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; 各个操作函数的定义为: List MakeEmpty() :创建并返回一个空的线性表; Position Find( List L, ElementType X ) :返回线性表中X的位置。若找不到则返回ERROR; bool Insert( List L, ElementType X, Position P ) :将X插入在位置P并返回true。若空间已满,则打印“FULL”并返回false;如果参数P指向非法位置,则打印“ILLEGAL POSITION”并返回false; bool Delete( List L, Position P )

顺序表逆置

匿名 (未验证) 提交于 2019-12-03 00:19:01
#include<stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define ElemType int typedef struct { int *elem; int length; int listsize; }SqList; int InitList_Sq(SqList &L) { // 算法2.3 // 构造一个空的线性表L。 L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if (!L.elem) { printf("NO1"); return OK; } // 存储分配失败 L.length = 0; // 空表长度为0 L.listsize = LIST_INIT_SIZE; // 初始存储容量 return OK; } // InitList_Sq int ListInsert_Sq(SqList &L, int i, ElemType e) { // 算法2.4 // 在顺序线性表L的第i个元素之前插入新的元素e, // i的合法值为1≤i≤ListLength_Sq(L)+1 ElemType *p; if (i <

稀疏矩阵――三元组顺序表

匿名 (未验证) 提交于 2019-12-03 00:15:02
Ŀ¼ 假设m n的矩阵中,有t的非零元,令s=t/m n,当,s<=0.05时,称此矩阵为稀疏矩阵,简单理解就是非零元特别少的矩阵 //一般矩阵a 1 2 3 a= 4 5 6 7 8 9 //稀疏矩阵s 0 0 0 0 0 0 2 0 0 5 s= 0 0 3 0 0 0 0 0 0 4 一个m * n的矩阵转置后变为 n * m的矩阵 //3*2的矩阵-转置前 1 2 4 5 7 8 //转置后变为2*3 1 4 7 2 5 8 转置后的矩阵每个元素的下表与原来的下表刚好相反,例如上面4转置前的下标为(2,1),转置后变为(1,2); 之所以引入三元组顺序表,是因为,对于稀疏矩阵而言,用传统的存储方法会造成存储空间的浪费 0 12 9 0 0 0 0 0 0 0 0 0 0 0 -3 0 0 0 0 14 0 M= 0 0 24 0 0 0 0 0 18 0 0 0 0 0 15 0 0 -7 0 0 0 //上面矩阵用三元组表示 i j v 1 2 12 1 3 9 3 1 -3 3 6 14 4 3 24 5 2 18 6 1 15 6 4 -7 typedef struct { int i,j; //行坐标、列坐标 ElemType e; //元素 }Triple; typedef struct { Triple date[MAXSIZE+1]; //0不存储元素 int

数据结构实验1――顺序表

匿名 (未验证) 提交于 2019-12-03 00:09:02
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <fstream> 7 #include <iomanip> 8 #include <string> 9 #include <wchar.h> 10 #include <Windows.h> 11 using namespace std ; 12 13 #define ok 1 14 #define error 0 15 #define overflow - 2 16 typedef int elemtype ; 17 const int maxn = 100 ; 18 typedef int status ; 19 typedef struct { 20 char no [ 20 ]; 21 char name [ 80 ]; 22 elemtype grade ; 23 } student ; 24 typedef struct { 25 student * elem ; 26 int length ; 27 } sqlist ; 28 29 int main () 30 { 31 SetConsoleOutputCP ( 65001 ); 32

数据结构:有序顺序表里插入一个数,使得顺序表依然有序。

匿名 (未验证) 提交于 2019-12-03 00:06:01
废话不多说,直接上程序 #include <stdio.h> #include <stdlib.h> #define MaxSize 20 typedef int ElemType; typedef struct { int length; ElemType data[MaxSize+1]; }SqList; //为了方便,顺序表的第一个位置不放值,也就是下标为0的 void CreateList(SqList *&L,ElemType a[],int n) { int i; for(i=1;i<=n;i++) L->data[i]=a[i]; L->length=n; } //初始化顺序表,向系统申请空间 void InitList(SqList *&L) { L=(SqList *)malloc(sizeof(SqList)); L->length =0; } //在有序表中加入一个数,使得表依然有序 bool InsertList(SqList *&L,ElemType e) { if(L->length==MaxSize) return false; int n=L->length+1; L->length++; while(n>=2 && edata[n-1]) L->data[n]=e; return true; } //输出线性表长度和元素 void ShowList

顺序表的结构及代码实现

匿名 (未验证) 提交于 2019-12-03 00:03:02
顺序表概念 顺序表是用一段物理地址连续的存储单元依次存储数据元素,通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系的线性结构,一般情况下采用数组存储,并在数组上完成数据的增删查改操作的一类线性表 动态顺序表的开辟 在建立顺序表时首先明确我们所需要引用的变量,一个存储数据的数组 array[ ] 、记录有效数据个数的 size、记录数组容量的 capacity 顺序表一般可以分为: 静态顺序表:使用定长数组存储 // 顺序表的静态存储 # define N 100 typedef int SLDataType ; typedef struct SeqList { SLDataType array [ N ] ; // 定长数组 size_t size ; // 有效数据的个数 } SeqList ; 动态顺序表:使用动态开辟的数组存储 // 顺序表的动态存储 typedef struct SeqList { SLDataType * array ; // 指向动态开辟的数组 size_t size ; // 有效数据个数 size_t capicity ; // 容量空间的大小 } SeqList ; 静态顺序表只适用于确定知道需要存多少数据的场景。静态顺序表的定长数组容易导致空间浪费或数组越界,所以现实中基本都是使用动态顺序表,根据需要动态的分配空间大小

数据结构―顺序表

匿名 (未验证) 提交于 2019-12-02 23:52:01
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<memory.h> typedef struct seqlist { int arr[10]; //首元素地址 int capacity; //数组一共能容纳多少数据。sizeof(arr)/sizeof(arr[0]) int size; //统计数组现在已经放进去多少数据,size值的范围 [0,capacity] }seqlist; //数组元素下标的最大值 capacity-1 顺序表:表现一般是数组,地址连续的存储单元依次存储数据元素。arr[10] 长度是固定的,在分配内存之前要确定数组的长度 n=sizeof(arr) / sizeof(arr[0]) 存储空间连续,允许随机访问,即访问任何下标的地方都可以 [0,n) 使用索引(下标)访问元素 arr[index] 插入元素,要判断是否超出数组下标。超出则申请二倍长度的新空间,再数据复制到新空间 每超出,如果是将k插入到链表末尾: int main() { int arr[10] = { 1, 2, 3, 4 }; seqlist* Seqlist; Seqlist->arr[9] = k; Seqlist-

顺序表

匿名 (未验证) 提交于 2019-12-02 23:41:02
线性表的动态分配顺序存储结构伪代码 (1)宏定义(替换):用一个字符串替换成另一个字符串,只可单独使用(定义)。 例:#define a 2(在程序中出现a的地方都替换成2) (2)★★初始分配量/分配增量/线性表长度/当前分配的存储容量都是指的Elemtype变量的数量 在增加存储空间时计算数量×一个基类型的大小 如int类型 listsize=5→能存5个整数 (3)typedef(为一种数据类型定义一个新名字) 包括基类型/自定义类型(struct等) type struct Stu{}a;(为结构体类型Stu定义一个新的名字a→其中a是结构体类型名)其中Stu可以省略 如下:定义了一个结构体(线性表)并换名为SqList(包括一个数组指针 长度及存储容量) (4)elem是个数组指针(将指向一个elemtype的数组 其中elem是地址变量,赋值数组基地址) #denine LIST_INIT_SIZE 100 (定义线性表存储空间的初试分配量为100) #define LISTINCREMENT 10 (定义线性表存储空间的分配增量) typedef struct { Elemtype *elem; //存储空间基址 (数组指针,值为数组基地址) int length; //(线性表的)当前长度 int listsize; //当前分配的存储容量,以sizeof

链表:顺序表、单链表、循环链表、双向链表

匿名 (未验证) 提交于 2019-12-02 23:39:01
内部结点唯一的前驱和后继,表头 只有后继,表尾只有前驱。 1、线性结构 线性表:顺序表(数组)、链表 栈:插入和删除都限制在表的同一端进行(后入先出) 队列:插入在一端,删除在另一端(先进先出) //线性表类模板如下,是顺序表类和链表类的基类,用虚函数virtual template <class T> //value的类型是T class LinearList { virtual void clear() const=0;//置空线性表 virtual bool isEmpty() const=0;//线性表为空时,返回true //增 virtual bool append(const T value)=0;//表尾添加一个元素value virtual bool insert(const int p, const T value)=0;//位置p上插入元素value //删 virtual bool delete(const int p)=0;//删除位置p上元素 //改 virtual bool setValue(cosnt int p, const T value)=0;//用value修改位置p的元素值 //查 virtual bool getPos(int& p, const T value) const=0;//查找元素为value的元素并返回其位置 virtual