顺序表

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

梦想与她 提交于 2019-11-29 17:17:59
废话不多说,直接上程序 #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+1]=L->data[–n]; L->data[n]=e; return true; }

算法与数据结构(11): 线性表(2)——链表

别等时光非礼了梦想. 提交于 2019-11-29 16:38:57
文章目录 3 链表的基本操作 3.1 链表简介 3.2 代码示例 4 链表应用——通讯录 参考资料 注:转载请标明原文出处链接: https://xiongyiming.blog.csdn.net/article/details/100855604 3 链表的基本操作 3.1 链表简介 链表 是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表 由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的 数据域 ,另一个是存储下一个结点地址的 指针域 。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。 (以上均来自百度百科) 顺序表优点 :遍历和寻址非常快 顺序表缺点 :往顺序表中插入一个元素,顺序表中的元素都要往后移动;顺序表中删除一个元素, 顺序表中的元素都要往前移动。这样的效率很低。 因此,针对顺序表的缺点,引出 链表 。 3.2 代码示例 要求 线性表——单链表 List();//创建线性表——构造函数 ~List(); //销毁线性表——析构函数 void

线性表

不打扰是莪最后的温柔 提交于 2019-11-29 12:36:55
顺序表   顺序表是采用顺序结构存储的线性表。顺序表是将所有元素放到一块连续的存储空间中,特点是存取速度快,但是不可以动态增加长度。 链表   链表是采用链式结构存储的线性表。链表中的元素在存储空间中的位置不一定是连续的,所以链表使用结点来存储元素,每个节点中还存储了相邻节点位置信息。由于不是连续存储,存取元素的速度比顺序表差。但是只要存储空间足够,链表就可以动态增加长度,也就是说,相较于顺序表,链表能更快速地进行元素的插入和删除操作。   链表需要一个头指针head来表示链表的第一个结点。根据结点中存储的相邻结点信息的不同,链表又可以细分为单向链表和双向链表。若链表的第一个结点和最后一个结点相连,则该链表又可以称为循环链表。 单向链表   单向链表的结点中只保存了直接后继结点的位置信息。也就是说,结点中有一个next指针指向该结点的直接后继结点,若该结点是最后一个结点,则next取null。      单向链表的结点结构定义如下: 1 public class LNode<E> { 2 3 public E data; 4 5 public LNode<E> next; 6 7 public LNode(E data) { 8 this.data = data; 9 } 10 11 } LNode   单向链表的插入分为三种情况:    在前面插入

数据结构------链表

自作多情 提交于 2019-11-29 12:17:33
链表分类 单向、双向 有头、无头 有循环、无循环 可以随机组合 链表与顺序表的区别 顺序表的空间是一段连续的空间,而链表的空间为不连续空间 顺序表支持随机访问,链表不支持随机访问 在任意位置插入/删除元素时,顺序表没有链表方便 顺序表不需要频繁申请空间,而链表需要,因为链表容易造成空间碎片 无头单向不循环链表的相关接口实现 1 #pragma once 2 #include <stdio.h> 3 #include <assert.h> 4 #include <stdlib.h> 5 6 typedef struct Node 7 { 8 int value; 9 struct Node *next; 10 } Node; 11 12 typedef struct Llist 13 { 14 Node *first; 15 } Llist; 16 17 void LinklistInit(Llist *llist) 18 { 19 llist->first = NULL; 20 } 21 22 void Linklistdestory(Llist *llist ) 23 { 24 assert(llist); 25 Node *cur = llist->first; 26 while (cur != NULL) 27 { 28 Node *next = cur->next; 29

数据结构-线性表

本小妞迷上赌 提交于 2019-11-29 11:58:22
  线性表是一种常用的数据结构,通常用来存储数据,存储方式是线性的。常见的线性表有顺序表, 链表等。顺序表是基于数组实现的,链表是通过一个个节点链接而成。线性表具有随机访问的机制,可以 在任意位置插入和删除数据元素。   C语言实现:     #define MaxSize 10     typedef struct{       char list[MaxSize];       int capacity;     }SequenceList;//ADT定义,字符数组大小10     void ListInitalize(SequenceList *L){       L->capacity= 0;//初始化数据元素个数为0     }     int Length(SequenceList L){//返回顺序表长度L       return L.capacity;     }     boolean ListInsert(SequenceList *L,int i,char target){//将target插入顺序表L的第i个位置       if(L->capacity >= MaxSize){         return false;//表长大于最大容量,无法插入       else if(i < 0 || i > L->capacity){        

数据结构:顺序表的操作

只愿长相守 提交于 2019-11-29 08:02:27
顺序表:是一种线性结构,申请连续的内存空间,数据结构应有存储数据的一维数组和顺序表的长度和最大容量。 功能:顺序表的初始化,插入节点,删除节点,和打印节点 #include<stdio.h> #define SIZE 5 typedef struct Table{ int *head; //动态数组 int length; //长度 int size; }SeqTable; //初始化 void Init(SeqTable* Ta){ //申请内存空间 if((Ta->head = (int *)malloc(SIZE*sizeof(int))) == NULL) { printf("not enough!"); exit(0); } Ta->length = 0; Ta->size = SIZE; } //插入元素 void Insert(SeqTable* Ta, int data){ if(Ta->length >= Ta->size) return; else { Ta->head[Ta->length] = data; Ta->length += 1; } } //删除节点 void delete(SeqTable* Ta, int data){ int i =0; int j = Ta->length -1; int flag =0; if(Ta){ //先找到该元素

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

好久不见. 提交于 2019-11-29 05:57:02
题目地址: https://pintia.cn/problem-sets/15 /problems/725 顺序表基本操作 注意初始化空表的时候 List L = (List)malloc(sizeof(List)) 会导致答案错误,但是本地编译并不会报错 正确写法应该是 List L = (List)malloc(sizeof(struct LNode)) List MakeEmpty() { List L = (List)malloc(sizeof(struct LNode));//sizeof(list)会导致答案错误--++ L->Last = -1; return L; } Position Find(List L, ElementType X) { for(int i = 0; i <= L->Last; ++i) { if(L->Data[i] == X) return i; } return ERROR; } bool Insert(List L, ElementType X, Position P) { if(L->Last+1 == MAXSIZE) { printf("FULL"); return false; } if(P > L->Last+1 || P < 0) { printf("ILLEGAL POSITION"); return false; }

泛型

给你一囗甜甜゛ 提交于 2019-11-29 05:03:46
泛型: 1.诞生的意义: 顺序表本身是一种抽象数据类型,保存的数据不只是int型 如果没有泛型的支持,我们必须为为每一种要保存的类型定义一个顺序表类 为了解决这个问题: 第一阶段: 1)Object是所有类的基类 2)多态:基类的引用可以指向任何子类的对象 第一阶段的方案引入的新的问题: ArrayList list=new ArrayList(); list.add(new person()); String s=(String)list.get(0); list 第 0 个下标处,实际的对象类型是person String 引用无法指向这个对象 运行期间会抛出异常ClassCastException 写代码的人必须一直记得顺序表中的元素类型,否则就会抛异常 为了让错误尽可能在编译期间出现,引入了泛型 2.泛型的使用语法 泛型的三种用途:泛型接口、泛型类、泛型方法 1)如何使用一个泛型类,语法+背后模型 2)自己去定义一个泛型类 3)使用和定义泛型的方法 4)泛型的其他东西 1.泛型类: class ArrayList<类型形参变量 Type Variable Paramter>{} class ArrayList<E>{ E[] array; int size; 类型变量实参 } Type Variable Argument 使用泛型类 new ArrayList<String

顺序表的一些重要操作

試著忘記壹切 提交于 2019-11-28 18:29:05
ArrayList 常用操作: 构造方法: ArrayList(); 构造空的·顺序表,容量是默认容量 ArrayList(int capacity); 构造空的顺序表,容量是Capacity ArrayList(Collection c); 构造一个顺序表,把C中的所有元素放到顺序表中 List<Integer> origin=Arrays.asList(1,2,3,4,5); ArrayList<Integer> list=new ArrayList<>(origin); 常用方法: add(E element); 尾插数据 add(int index,E element); 把元素插入到index位置 remove(Object o); 删除顺序表中第一个e remove(int index); 删除顺序表中的下标index位置的元素 contains(E e); 判断e在不在顺序表中(查找) indexOf(E e); 从前数下标 lastIndexOf(E e); 从后数下标 get(int index); 返回下标元素 set(int index,E e); 更改下标元素 来源: https://blog.51cto.com/14232274/2433027

顺序表中基本操作

妖精的绣舞 提交于 2019-11-28 16:43:24
前言:最近玩esp8266和ucos-iii以及在学c++比较多,接触的大部分都是指针、结构体、链表;刚好自己又在看数据结构(数据结构真的非常重要,要好好学,是学算法的敲门砖,哈哈哈),个人看法在对顺序表进行元素增和删操作,效率比较低(要移动非常多的其他元素),而我之前写的对链表操作,使用指针操作,效率就高多了。好了,来看今天的学习总结吧! 一、顺序表的初始化: 算法步骤: 1、为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址 2、将表的当前长度设为0 伪代码实现: Status InitList(SqList &L) { //构造一个空的顺序表L L.elem= new ElemType[MAXSIZE];//为顺序表分配一个大小为MAXSIZE的数组空间 if(!L.elem) exit(OVERFLOW);//存储分配失败退出 L.length=0;//空表长度为0 return OK; } 二、取值操作: 算法步骤: 1、判断指定的位置序号i值是否合理(1<= i <=L.length),若不合理,则返回ERROR。 2、若i值合理,则将第i个数据元素L.elem[i-1]赋给参数e,通过e返回第i个数据元素的传值 为代码实现: Status GetElem(SqList L ,int i,ElemType &e) { if(i<1||i>L