顺序表

《静态顺序表的练习》

☆樱花仙子☆ 提交于 2020-03-08 11:11:42
//顺序表的一些基本操作 #include<stdio.h> #define MaxSize 10 //向顺序表中插入元素 void InsertElem(int Sqlist[],int *len,int i,int x) {//向顺序表中第i个位置上插入元素x int t; if(*len==MaxSize || i<1 || i>*len+1) { printf("插入位置非法!"); return; } for(t = *len-1;t>=i-1;t--) Sqlist[t+1] = Sqlist[t]; Sqlist[i-1] = x; *len = *len+1; } //向顺序表中删除元素 void DelElem(int Sqlist[],int *len,int i) {//删除顺序表中第i个元素 int j; if(i<1 || i>*len) { printf("删除位置非法!"); return; } for(j=i;j<=*len-1;j++) Sqlist[j-1] = Sqlist[j]; *len = *len - 1; } //创建一个静态顺序表 void CreatList(int Sqlist[],int n) { int i; printf("请输入%d个整数(以空格分开):",n); for(i=0;i<n;i++) scanf("%d",

顺序表 删除指定范围

拜拜、爱过 提交于 2020-03-07 02:31:32
题目:设计一个高效的算法,从顺序表L中删除所有值介于x和y之间(包括x和y)的所有元素(假设y>=x),要求时间复杂度为O(n),空间复杂度为O(1)。 struct _seqlist { ElemType elem [ MAXSIZE ] ; int last ; } ; typedef struct _seqlist SeqList ; void del_x2y ( SeqList * L , ElemType x , ElemType y ) { int i = 0 , j = 0 ; for ( i = 0 ; i < MAXSIZE ; i ++ ) { if ( L -> elem [ i ] < x || L -> elem [ i ] > y ) { L -> elem [ j ++ ] = L -> elem [ i ] ; //在范围外,则继续赋值 } } L -> last = j ; } 来源: CSDN 作者: 江海寄余生* 链接: https://blog.csdn.net/weixin_45454859/article/details/104699372

用顺序表实现求两个集合的并集

荒凉一梦 提交于 2020-03-05 13:59:15
#include<iostream.h> #include<malloc.h> #include<limits.h> #include<string.h> #include<stdlib.h> #include<ctype.h> #include<stdlib.h> #include<process.h> #define OK 1 #define INIT_LiST_SIZE 100//顺序表的初始长度 #define LIST_ADD 10//顺序表每次增加的长度 #define ERROR 0 #define OVERFLOW 3 typedef int Elemtype; typedef struct { Elemtype *elem;//顺序表的基地址 int length;//顺序表的当前长度 int listsize;//顺序表分配的长度 }SqList; void InitList(Sqlist &La)//初始化顺序表 { La.elem=(Elemtype *)malloc(INIT_LIST_SIZE*sizeof(int));//开辟100个一连串的地址,并强制转化为Elemtype类型 La.length=0;//顺序表的当前长度为0 La.listsize=100;//目前顺序表的总长度 } Elemtype ListInsert(Sqlist &La

顺序表的底层实现(顺序表的增删改查,顺序表的冒泡排序,顺序表的二分查找)

故事扮演 提交于 2020-03-03 03:31:38
顺序表的底层实现 1、顺序表的概念 顺序表是用一段物理地址连续的存储单元存储数据元素的线性结构,一般情况下采用数组存储。可以完成对数据的增删改查。 2、顺序表的结构 顺序表的结构有两种: 1、静态顺序表:使用定长数组存储 2、动态顺序表:使用动态开辟的数组存储 //顺序表的静态存储 #define N 100 typedef int SLDataType; typedef struct SeqList { SLDataType array[N];//定长数组 size_t size;//有效数组个数 }SeqList; //顺序表的动态存储 typedef int SLDataType; typedef struct SeqList { SLDataType *arrary;//指向动态开辟的数组 size_t size;//有效数组个数 size_t capacity;//容量空间大小 }SeqList; 3、顺序表的实现 接口SeqList.h #ifndef _SEQLIST_H_ #define _SEQLIST_H_ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h> #define CAPACITY 2

C++:顺序表类实现约瑟夫问题_密码不同

◇◆丶佛笑我妖孽 提交于 2020-03-01 14:47:24
1 //.h 2 3 #pragma once 4 #include <iostream> 5 using namespace std; 6 #define MAXSIZE 100 7 8 template <class T> 9 class SeqList 10 { 11   T data[MAXSIZE]; 12   int length; 13 public: 14   SeqList(); 15   SeqList(T a[],int n); 16   ~SeqList(); 17   void Josephus2(int p[], int m0); 18   void PrintList(); 19 }; 20 21 22 template <class T> 23 SeqList<T>::SeqList() 24 { 25   length = 0; 26 } 27 28 template<class T> 29 SeqList<T>::SeqList(T a[], int n) 30 { 31   length = n; 32   for (int i = 0; i < length; i++) 33     data[i] = a[i]; 34 } 35 36 template <class T> 37 SeqList<T>::~SeqList() 38 { 39

数据结构(十七)数组和矩阵

点点圈 提交于 2020-03-01 06:55:49
  一、数组的定义:数组是n(n>=1)个相同数据类型的数据元素构成的占用一块地址连续的内存单元的有限集合。所有的线性结构(包括线性表、堆栈、队列、串、数组和矩阵)的顺序存储结构实际上就是使用数组来存储。可见,数组是其他数据结构实现存续存储结构的基础,数组这种数据结构是软件设计中最基础的数据结构。   二、数组的实现机制:数组通常以字节为计数单位,同时根据内存单元地址映像公式来分配内存。用高级语言定义数组时,数组在内存中的首地址由系统动态分配并保存。高级语言通常用数组名保存在内存中的首地址。一旦确定了一个数组的首地址,系统就可计算出该数组中任意一个数组元素的内存地址。由于计算数组各个元素内存地址的时间相等,所以存取数组中任意一个元素的时间也相等,通常称具有这种特性的存储结构为随机存储结构。所以说数组具有随机存储结构的特性。   三、在数值分析中,常常会出现一些拥有许多相同数据元素或零元素的高阶矩阵。将具有许多相同元素或者零元素,且数据分布具有一定规律的矩阵称为特殊矩阵,例如,对称矩阵、三角矩阵和对角矩阵。为了节省存储空间,需要对这类矩阵进行压缩存储。压缩存储的原则是:多个值相同的矩阵元素分配同一个存储空间,零元素不分配存储空间。对于对称矩阵、三角矩阵和对角矩阵来说,首先根据矩阵中任意一个元素与压缩后一位数组的下标的对应关系得到每一个数据元素在数组中存储的位置

PTA6-2 顺序表操作集

邮差的信 提交于 2020-02-28 21:37:55
本题要求实现顺序表的操作集。 函数接口定义: 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 )

Java数据结构总结

懵懂的女人 提交于 2020-02-28 18:25:16
一:通过一些源码展示各种数据结构的使用方法: 1.顺序表 概念及结构 : 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改 public interface ISequence { //在pos位置插入val boolean add(int pos,Object data); //查找关键字key 找到返回key的下标,没有返回null; int search(Object key); //查找是否包含关键字key是否在顺序表当中(这个和search有点冲突) boolean contains(Object key); //得到pos位置的值 Object getPos(int pos); //删除第一次出现的关键字key Object remove(Object key); //得到顺序表的长度 int size(); //打印顺序表 void display(); //清空顺序表以防内存泄漏 void clear(); } 2.链表 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的引用链 接次序实现的 。 链表的种类: 无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结 构,如哈希桶、图的邻接表等等。 带头循环单链表

线性表和链表的比较

谁都会走 提交于 2020-02-26 19:13:22
区别 1、存取(读写)方式 顺序表可以顺序存取,也可以随机存取;链表只能从表头顺序存取元素。 例如:在第 i 个位置上执行存取操作,顺序表只需访问一次,而链表则需要从表头开始依次访问 i 次。 2、逻辑结构与物理结构 采用顺序存取时,逻辑结构上相邻的元素,对应的物理存储位置也是相邻的;而采用链式存储时,逻辑结构上相邻的元素,物理存储位置则不一定相邻,对应的逻辑关系也是通过指针链接来表示的。 3、查找,插入和删除操作 对于按值查找,顺序表无序时,两者的时间复杂度均为O(n);当顺序表有序时,可采用折半查找,此时的时间复杂度为0(log2n); 对于按序号查找,顺序表支持随机访问,时间复杂度仅为O(1),而链表的平均时间复杂度为O(n); 顺序表的插入,删除操作,平均需要移动半个表长的元素,链表的插入,删除操作,只需要修改相关结点的指针域即可,由于链表的每个结点都带有指针域,故其存储密度不够大。 4、空间分配 顺序存储在静态存储分配情形下,一旦存储空间装满就不能扩充了,若要再加入新的元素,则会出现内存溢出,因此需要预先分配存储空间;若预先分配空间过大,可能会导致顺序表后部大量闲置,若预先分配空间过小,又会造成溢出;动态存储分配虽然存储空间可以扩充,但是需要移动大量元素,导致操作效率降低,而且若内存中没有更大块的连续存储空间,则会导致分配失败;链式存储的结点空间只在需要的时申请分配

使用canvas制作简易的数据结构核心算法演示系统——线性表(一)

空扰寡人 提交于 2020-02-25 13:35:37
顺序表 顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。 顺序表的插入 对于顺序表,在进行插入之前,首先需要找到待插入的位置,以递增有序的顺序表为例 function SqlistInFind ( a , x ) { for ( var i = 0 ; i < a . length ; i ++ ) { if ( x < a [ i ] ) { return i ; } } return i ; } 如上所示,查找插入位置时,按顺序遍历顺序表内所有元素,若找到大于待插入元素的元素,则返回当前位置,否则返回顺序表长度,即插入到最最后。 找到待插入位置之后,即调用进行插入操作的函数 function SqlistInsert ( a , p , x ) { for ( var i = a . length - 1 ; i >= p ; i -- ) { a [ i + 1 ] = a [ i ] ; } a [ p ] = x ; return a ; } 如上所示