顺序表

顺序表的定义及其相关基本操作

删除回忆录丶 提交于 2019-11-27 10:55:38
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 #define maxSize 100 5 typedef struct{ 6 int data[maxSize]; // 存放顺序表元素的数组 7 int length; //存放顺序表的长度 8 }Sqlist; //顺序表定义的类型 9 10 // 但在考试中常用如下方式: 11 int A[maxSize]; 12 int n; 13 void initList(Sqlist &L){ 14 L.length = 0; 15 } 16 //在顺序表查找第一个值等于e的元素,并返回其下标 17 int FindElem(Sqlist L, int e){ 18 for(int i = 0;i < L.length; ++i) 19 if(e == L.data[i]) 20 return i; 21 return -1; 22 } 23 //用e返回顺序表中制定位置p(0<=p<=length-1)位置上的元素 24 int getElem(Sqlist L,int p,int &e){ //e要改变,所以用引用型 25 if(p < 0 || p >L.length-1) //p越界错误时返回-1 26 return -1; 27 e = L

设计一个算法将一个顺序表逆置

假装没事ソ 提交于 2019-11-27 10:28:01
#include<iostream> #include<malloc.h> using namespace std; typedef struct { int length;//保存长度 int data[40];//数组 } SqList; /*算法1:设计一个高效的算法,将顺序表中的所有元素逆置、要求算法空间股咋度为o(1)*/ //初始化顺序表 void initReverse(SqList &s,int *a,int l){ s.length=0; //插入元素 for(int i=0;i<l;i++){ s.data[i]=a[i]; } s.length=l; //先输出所有元素 for(int i=0;i<s.length;i++){ cout<<s.data[i]<<" "; } cout<<endl; //逆置 int m=s.length/2; int start=0,end=s.length-1,temp; while(start<end){ temp=s.data[start]; s.data[start]=s.data[end]; s.data[end]=temp; start++; end--; } //输出并且销毁 系统自动销毁 无需操作 for(int i=0;i<s.length;i++){ cout<<s.data[i]<<" "; } cout

顺序表上的基本操作实现

感情迁移 提交于 2019-11-27 08:36:17
在顺序存储结构实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算 #include <iostream> #include <cstdlib> using namespace std; template<typename T> class SeqList { private: T* data; int maxSize; int last; void Resize(int newSize) { T *newAry; if(newSize<=0) { cerr<<"无效的数组大小"<<endl; return; } if(newSize!=maxSize) { newAry=new T[newSize]; if(newAry==NULL) { cerr<<"存储分配错误"<<endl; exit(1); } int n=last+1; T* srcptr=data; T* desptr=newAry; while(n--) { *desptr++=*srcptr++; } delete [] data; data=newAry; maxSize=newSize; } } public: SeqList(int sz=0) { maxSize=sz; last=sz-1; data=new T[maxSize]; } SeqList(SeqList<T> &L) {

数据结构与算法—线性表详解

家住魔仙堡 提交于 2019-11-27 06:17:32
前言 通过前面 数据结构与算法前导 我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容。当然,我用 自己的理解解 分享给大家。 其实说实话,可能很多人依然分不清 线性表,顺序表,和链表 之间的区别和联系! 线性表 : 逻辑结构 , 就是对外暴露数据之间的关系,不关心底层如何实现。 顺序表、链表 : 物理结构 ,他是实现一个结构实际物理地址上的结构。比如顺序表就是用 数组 实现。而链表用 指针 完成主要工作。不同的结构在不同的场景有不同的区别。 对于java来说,大家都知道 List 接口类型,这就是逻辑结构,因为他就是封装了一个线性关系的一系列方法和数据。而具体的实现其实就是跟物理结构相关的内容。比如顺序表的内容存储使用数组的,然后一个get,set,add方法都要 基于数组 来完成,而链表是基于 指针 的。当我们考虑对象中的数据关系就要考虑 指针 的属性。指针的指向和value。 下面用一个图来浅析线性表的关系。可能有些不太确切,但是其中可以参考,并且后面也会根据这个图举例。 线性表基本架构 对于一个 线性表 来说。 不管 它的 具体实现 方法如何,我们应该有的 函数名称 和 实现效果 应该一致。你也可以感觉的到在一些结构的设计。比如List的 Arraylist 和 LinkedList

大话数据结构读后感(一)线性表栈与队列

℡╲_俬逩灬. 提交于 2019-11-27 06:16:13
3.2 线性表的定义 3.3 线性表的抽象数据类型行:创建,销毁,增删改查等等操作 3.4 线性表之顺序存储 :顺序表 3.5 顺序表的插入和删除:相当于数组的插入和删除;然后把当前length +(-) 1;   顺序表的优点:无须为表示表中的元素之间的逻辑关系而添加额外的存储空间;可以快速地访问存取表中的任意位置子的元素;   缺点:插入和删除操作需要移动大量的元素;当线性表长度变化较大时,难以确定存储空间的容量;造成存储空间的碎片; 3.6 线性表的链式存储结构:链表 解决了顺序表的增删需要移动大量元素的问题; 3.7 单链表的读取:next指针遍历; 3.8 单链表的插入和删除:插入s : s->next=p->next; p->next=s; 删除s:s=q; p->next=s->next; free(s); 3.9 单链表的整表创建:(插入) 头插和尾插:尾插最后指向NULL; 3.10 单链表的整表删除:挨个删除 : p=head->next; while(p!=NULL) { q=p->next; free(p) ; p=q; } 3.11 单链表结构与顺序结构存储结构优缺点: 存储分配方式:顺序表存储单元连续,线性表任意存储位置; 时间性能:顺序表方便查找;单链表适合插入和删除; 空间性能:顺序表需预先分配存储空间,分大了浪费,分小了容易上溢;

数据结构与算法—线性表详解

久未见 提交于 2019-11-27 05:01:25
前言 通过前面 数据结构与算法前导 我么知道了数据结构的一些 概念和重要性 ,那么我们今天总结下线性表相关的内容。当然,我用 自己的理解解 分享给大家。 其实说实话,可能很多人依然 分不清 线性表,顺序表,和链表 之间的 区别和联系 ! 线性表 : 逻辑结构 , 就是对外暴露数据之间的关系,不关心底层如何实现。 顺序表、链表 : 物理结构 ,他是实现一个结构实际物理地址上的结构。比如顺序表就是用 数组 实现。而链表用 指针 完成主要工作。不同的结构在不同的场景有不同的区别。 对于java来说,大家都知道 List 接口类型,这就是逻辑结构,因为他就是封装了一个线性关系的一系列方法和数据。而具体的实现其实就是跟物理结构相关的内容。比如顺序表的内容存储使用数组的,然后一个get,set,add方法都要 基于数组 来完成,而链表是基于 指针 的。当我们考虑对象中的数据关系就要考虑 指针 的属性。指针的指向和value。 下面用一个图来浅析线性表的关系。可能有些不太确切,但是其中可以参考,并且后面也会根据这个图举例。 线性表基本架构 对于一个 线性表 来说。 不管 它的 具体实现 方法如何,我们应该有的 函数名称 和 实现效果 应该一致。你也可以感觉的到在一些结构的设计。比如List的 Arraylist 和 LinkedList

数据结构中的顺序表和链表(Python语言)

拈花ヽ惹草 提交于 2019-11-27 03:56:10
转载: https://blog.csdn.net/weixin_43187669/article/details/96426362 算法是为了解决实际问题而设计的,数据结构是算法需要处理的问题载体。 Python提供现成的数据结构类型叫做Python的内置数据结构,比如列表、元组、集合、字典。 Python系统里面没有直接定义需要自定义的成为Python的扩展数据结构,比如栈、队列等。 顺序表的基本形式 1.定义:所谓顺序表,就是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由他们的存储顺序自然表示。 图a,每个元素所占存储单元大小固定相同。 图b,每个元素所占的存储单元大小不相同。存储一个链接地址。 顺序表的结构与实现 顺序表的两种基本实现方式 图a为一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一快存储区里。 图b为分离式结构,存储表信息的单元与元素存储区以连续的方式安排在两块存储区里。 元素存储区替换 一体式结构:若想更换数据区,则只能整体搬迁,即整个顺序表对象改变了。 分离式结构:若想更换数据区,只需要将信息区中的数据区链接地址更新即可,而该顺序表对象不变。 元素存储区扩充 1.只有分离式结构的元素存储区可以扩充。 2.扩充的两种策略: 1)每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置。 特点:节省空间,但是扩充操作频繁,操作次数多。

.NET Core 数据结构与算法 1-1

元气小坏坏 提交于 2019-11-27 03:03:54
.NET Core 数据结构与算法 1-1 本节内容为顺序表 简介 线性表是简单、基本、常用的数据结构。线性表是线性结构的抽象 (Abstract),线性结构的特点是结构中的数据元素之间存在一对一的线性关系。这 种一对一的关系指的是数据元素之间的位置关系,即: 除第一个位置的数据元素外,其它数据元素位置的前面都只有一个数据元素; 除后一个位置的数据元素外,其它数据元素位置的后面都只有一个元素。也就是说,数据元素是 一个接一个的排列。因此,可以把线性表想象为一种数据元素序列的数据结构。 本节我们对线性表中的顺序表进行一个讲解。 保存线性表简单、自然的方式,就是把表中的元素一个接一个地放进顺序的存储单元,这就是线性表的顺序存储(Sequence Storage)。线性表的顺序存储是指在内存中用一块地址连续的空间依次存放线性表的数据元素, 用这种方式存储的线性表叫顺序表(Sequence List)。说的明确一些也就是说,顺序表就是我们所接触过的数组。 线性表接口IListDS<T> 我们首先对我们会涉及到的函数进行一次封装,打包进线性表的接口中 interface IListDS<T> { int GetLength();//求长度,我们也可以通过属性进行操作 void Clear();//清空操作 bool IsEmpty();//判断线性表是否为空 void Append(T

数据结构之顺序表

萝らか妹 提交于 2019-11-27 00:11:59
最近在找工作,复习一些基础知识,所以想把以前学过的东西总结一下。 在华为面试的时候被问到顺序表的优点,当然主要是与链表相对而言: 1)随机访问,存储密度大。 2)逻辑上相邻的物理上也相邻. 顺序表的缺点: 1)插入删除时不方便,要移动大量元素. 实现代码: /*************************************************************************** * file name : SeqList.h * created : 2011/11/01 * description : * author : Gavin Dai XLX * update : ****************************************************************************/ #ifndef __SEQLIST_H #define __SEQLIST_H #include <iostream> using namespace std; const int g_iDefaultSize = 100; template <class Type> class SeqList { public: SeqList(int sz = g_iDefaultSize) : m_iMaxSize(sz), m

顺序表栈C语言实现

可紊 提交于 2019-11-26 15:47:14
/* * SeqStack.h * * Created on: 2019年8月1日 * Author: Administrator */ #ifndef SEQSTACK_H_ #define SEQSTACK_H_ //数组去模拟栈的顺序存储, 有数组的后面模拟栈顶 ,避免数据频繁移动 #define MAX_SIZE 1024 #define SEQ_STACK_TRUE 1 #define SEQ_STACK_FALSE 0 typedef struct SEQSTACK { void *data[MAX_SIZE]; int size; } SeqStack; //栈的初始化 SeqStack *Init_SeqStack(); //入栈 void Push_SeqStack(SeqStack *stack, void *data); //返回栈顶元素 void *Top_SeqStack(SeqStack *stack); //出栈 void Pop_SeqStack(SeqStack *stack); //判断是否为空 int IsEmpty(SeqStack *stack); //返回栈中元素个数 int Size_SeqStack(SeqStack *stack); //清空栈 void Clear_SeqStack(SeqStack *stack); //销毁