顺序表

05-1_链表的定义

北慕城南 提交于 2019-11-30 08:39:36
1. 链表的定义 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。 2. 为什么需要链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。 链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。 来源: https://www.cnblogs.com/nichengshishaonian/p/11576097.html

线性表——顺序表的实现与讲解(C++描述)

会有一股神秘感。 提交于 2019-11-30 07:56:35
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这种组织数据(同学)的方式我们可以称作线性表结构 定义 线性表 :具有零个或多个(具有相同性质,属于同一元素的)数据元素的有限序列 若将线性表记为 ( a<sub>0</sub> , a<sub>1</sub> ,a<sub>i -1</sub> a<sub>i</sub> ,a<sub>i +1</sub> , ... , a<sub>n - 1</sub> , a<sub>n</sub> ) 注意:i 是任意数字,只为了说明相对位置,下标即其在线性表中的位置) 前继和后继 :由于前后元素之间存在的是 顺序关系 ,所以除了首尾元素外,每个元素均含有 前驱 和 后继 ,简单的理解就是 前一个 元素和后一个元素 空表 :如果线性表中元素的个数 n 为线性表长度,那么 n = 0 的时候,线性表为空 首节点、尾节点 : 上面表示中的 :a<sub>0</sub> 称作首节点,a<sub>n</sub> 称作尾节点 抽象数据类型 数据类型 :一组 性质相同 的值的集合及定义在此集合上的一些操作的 总称 抽象数据类型 :是指一个数学模型及定义在该模型上的一组操作

线性表——顺序表的实现与讲解(C++描述)

眉间皱痕 提交于 2019-11-30 07:54:46
线性表 引言 新生安排体检,为了 便管理与统一数据,学校特地规定了排队的方式,即按照学号排队,谁在前谁在后,这都是规定好的,所以谁在谁不在,都是非常方便统计的,同学们就像被一条线(学号)联系起来了,这种组织数据(同学)的方式我们可以称作线性表结构 定义 线性表 :具有零个或多个(具有相同性质,属于同一元素的)数据元素的有限序列 若将线性表记为 ( a 0 , a 1 ,a i -1 a i ,a i +1 , ... , a n - 1 , a n ) 注意:i 是任意数字,只为了说明相对位置,下标即其在线性表中的位置) 前继和后继 :由于前后元素之间存在的是 顺序关系 ,所以除了首尾元素外,每个元素均含有 前驱 和 后继 ,简单的理解就是 前一个 元素和后一个元素 空表 :如果线性表中元素的个数 n 为线性表长度,那么 n = 0 的时候,线性表为空 首节点、尾节点 : 上面表示中的 :a 0 称作首节点,a n 称作尾节点 抽象数据类型 数据类型 :一组 性质相同 的值的集合及定义在此集合上的一些操作的 总称 抽象数据类型 :是指一个数学模型及定义在该模型上的一组操作 关于数据类型我们可以举这样一个例子 例如:我们常常用到的 整数型 浮点型 数据 这些都是数据的总称,所有符合其性质特征的都可以用其对应数据类型来定义,例如 520是一个满足整数特征的数据,所以可以赋值给

删除无序顺序表相同元素

∥☆過路亽.° 提交于 2019-11-30 06:08:34
//设计算法删除顺序表中重复元素 #include<stdio.h> #include<stdlib.h> #define max 100 typedef struct slist { int num[max]; int length; }list; list* creatlist();//顺序表的创建 void printlist(list *l);//顺序表的打印 void deletelist(list *l);//删除顺序表中相同元素 int main(void) { list *l = creatlist(); deletelist(l); printlist(l); return 0; } void deletelist(list *l) { //算法思想: 将当前元素与在其前面所有的元素进行比较大小 不一样则放入顺序表(不用开辟新的,只需覆盖赋值) int i,j = 0,k; for(i = 1; i < l->length ; i++) { k = 0;//每次都要重新赋值 因为每次都要跟前面所有的元素比较大小 while(k <= j && l->num [k] != l->num [i]) { k++;//可以看出第一次是第二个元素与第一个元素比较,之后是第三个与第一与第二个元素比较 } if(k > j)//这个循环条件说明 当前元素与前面所有元素都不一样

数据结构实现(顺序表)

天涯浪子 提交于 2019-11-30 05:24:57
#include<stdio.h> //数据结构之顺序表 /*原理:地址连续的存储单元依此存储线性表的元素 基本运算:插入 删除 查找 排序 要点:结构的定义很重要,所有的操作都是建立在数据结构之上的。 */ /*顺序表结构体定义:*/ //def数据最大长度 #define Maxsize 100 //定义数据元素类型,可以适应更多类型 typedef int Datatype; //定义顺序表类型,只是定义了一个类型,而不是变量 typedef struct SeqList//此处的SeqList可以不要 { Datatype data[Maxsize]; int last; }SeqList; SeqList InitSlist() {//初始化顺序表 SeqList L;//通过函数调用来申请空间,创建变量 L.last = -1;//表示表空 return L; } void Creat_Slist(SeqList &L) {//创建顺序表,给data初步赋值 int flag;//标示数据规模 scanf("%d",&flag); for(int i=0;i<flag;i++) { scanf("%d",&L.data[i]); L.last++; } } int Getlength(SeqList &L) { return (L.last + 1); } int

王道数据结构——线性表中顺序表的一些综合应用题

北战南征 提交于 2019-11-30 04:22:18
1.长度为n的顺序表中,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,用于删除线性表中所有值为x的数据元素。(满足要求的数放在第k位上) 1 #include <cstdio> 2 3 /*输出数组名为a、长度为n的数组*/ 4 void print(int *a, int n){ 5 for(int i = 0;i < n; i++){ 6 printf("%d ", a[i]); 7 } 8 puts(""); 9 } 10 11 /*解法1,第几个不等于x的数就应该在结果的第几个位置上,千万记得最后修改删除后的数组长度为k*/ 12 void f1(int *a, int n, int x){ 13 int k = 0; 14 for(int i = 0; i < n; i++){ 15 if(a[i] != x){ 16 a[k++] = a[i]; 17 } 18 } 19 n = k; 20 print(a,k); 21 } 22 23 /*解法2,用k记录等于x的个数,那么下一个不等于x的数在结果中的位置应该提前k个位置,最后数组的长度减去k*/ 24 void f2(int *a, int n, int x){ 25 int k = 0; 26 for(int i = 0; i < n; i++){ 27 if(a[i] == x) 28 k++; 29

循环链表及线性表的情况分析

六眼飞鱼酱① 提交于 2019-11-30 02:47:10
循环链表的应用之约瑟夫环问题以及线性表总结之顺序表与链表的比较   1.1问题说明   问题描述:编号为1,2,···,n的n个人围坐在一圆桌旁,每人持有一个正整数的密码。从第一个人开始报数,报到一个预先约定的正整数m时,停止报数,报m的人退席,下一个人又重新从1开始报数,依此重复,直至所有的人都退席。编一程序输出他们退席的编号序列。例如,设m=20,n=7,7个人的密码依次是3,1,7,2,4,8,4,则退席的人的编号依次为6,1,7,5,3,2,4。   基本要求:用不带表头结点的循环单链表表示围成圆圈的n个人;要求建立此循环单链表;某人离席相当于删除一个结点,要正确设置程序中循环终止的条件和删除结点时指针的修改变化。   1.2代码实现   #include   #include   #define NULL 0   typedef int ElemType;   typedef struct LNode{   ElemType data;   ElemType sequence;   LNode *next;   }LNode,*LinkList;   //创建一个不带头节点的循环单向链表   void createCircularList(LinkList &L, int n){   printf("依次输入数据元素:\n");   //输入第一个元素,即头节点  

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

我是研究僧i 提交于 2019-11-30 01:38:44
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 sqlist l; 33 int i, choose

顺序表的定义

岁酱吖の 提交于 2019-11-29 22:37:06
顺序表的定义 线性表的顺序存储又称为 顺序表 来看一个生活中的例子:周末和朋友一起吃火锅,人非常多,我们需要在等候区等候,这个等候区就与顺序表有非常多的相似之处,借助它去理解顺序表的特点。首先,在等候区有非常多的椅子,这些椅子往往是排成一排连续排放的,中间不会空出很大的空间造成浪费。这就与在顺序表中选取存储单元的方法是一样的,我们会选取一段地址连续的存储单元去存放顺序表。接着工作人员会安排我们在椅子上连续的坐下等候。在存储单元当中去进行数据的存放是一样的,也是依次地存放线性表当中的数据元素,中间也不会空出许多存储单元造成空间的浪费。最后结伴而行的朋友也会坐在相邻的椅子上,这与顺序表的存放是相同的。在逻辑上相邻的两个元素在物理位置上也要保证它相邻,也会把它存放在相邻的存储单元上。在这个例子当中,其实椅子就代表着存储单元,而每一个等候的人就是要存放的数据元素。来总结一下顺序表的特点: 一组地址连续存放的存储单元依次存放线性表的元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。 所以有这样的规律:顺序表中逻辑顺序与物理顺序相同 其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每一个小格子就代表一个存储单元。 在程序语言设计中,往往使用数组来实现顺序表。但是数组和顺序表又有一些差别,第一个差别是数组下标是从 0 开始的,而顺序表是从 1 开始的

顺序表的创建与功能实现

我的梦境 提交于 2019-11-29 19:17:21
1 #include<iostream> 2 #include<stdio.h> 3 4 #define MAXSIZE 100 5 #define OVERFLOW -2 6 #define ERROR 0 7 #define OK 1 8 9 using namespace std; 10 11 typedef struct squList 12 { 13 int *elem; 14 int length; 15 }SqList; 16 17 //初始化 18 int Init(SqList *L) 19 { 20 L->elem=new int[MAXSIZE]; 21 if(! L->elem) 22 { 23 exit(OVERFLOW); //存储分配失败 exit(0)---结束程序 24 } 25 int n,i=0; 26 cout<<"请输入顺序表元素个数"<<endl; 27 cin>>n; 28 while(i<n) 29 { 30 cin>>L->elem[i++]; 31 } 32 return (L->length=i+1); 33 cout<<"输出顺序表为:"<<endl; 34 } 35 36 //判断是否为空 37 void IsEmpty(SqList *L) 38 { 39 if(L->length) 40 cout<<"序列不为空"<