线性表总结

  • 线性表及其实现
      • 多项式的表示
      • 什么是线性表
      • 线性表的抽象数据类型描述
      • 线性表的顺序存储实现
      • 线性表的链式存储实现

线性表及其实现

多项式的表示

[例] 一元多项式及其运算
一元多项式 : 这里写图片描述
主要运算:多项式相加、相减、相乘等
【分析】如何表示多项式?
多项式的关键数据:
多项式项数n
各项系数ai 及指数 i
方法1:顺序存储结构直接表示
数组各分量对应多项式各项: a[i]: 项xi的系数ai
这里写图片描述
方法2:顺序存储结构表示非零项
这里写图片描述
按指数大小有序存储!
相加过程:从头开始,比较两个多项式当前对应项的指数
这里写图片描述

方法3:链表结构存储非零项
这里写图片描述

什么是线性表

多项式表示问题的启示:
1. 同一个问题可以有不同的表示(存储)方法
2. 有一类共性问题:有序线性序列的组织和管理
线性表(Linear List) : 由同类型数据元素构成有序序列的线性结构
1.表中元素个数称为线性表的长度
2.线性表没有元素时,称为空表
3.表起始位置称表头,表结束位置称表尾

线性表的抽象数据类型描述

类型名称:线性表(List)

数据对象集:线性表是 n (≥0)个元素构成的有序序列( a1, a2,… ,an )

操作集:线性表L属于 List,整数i表示位置,元素X 属于 ElementType, 线性表基本操作主要有:

1、List MakeEmpty():初始化一个空线性表L;
2、ElementType FindKth( int K, List L ):根据位序K,返回相应元素 ;
3、int Find( ElementType X, List L ):在线性表L中查找X的第一次出现位置;
5、void Delete( int i, List L ):删除指定位序i的元素;
6、int Length( List L ):返回线性表L的长度n。

线性表的顺序存储实现

利用数组的连续存储空间顺序存放线性表的各元素
这里写图片描述
主要操作的实现

typedef int Position;
typedef struct LNode *List;
struct LNode {ElementType Data[MAXSIZE];Position Last;
};/* 初始化 */
List MakeEmpty()
{List L;L = (List)malloc(sizeof(struct LNode));L->Last = -1;return L;
}/* 查找 */
#define ERROR -1Position Find( List L, ElementType X )
{Position i = 0;while( i <= L->Last && L->Data[i]!= X )i++;if ( i > L->Last )  return ERROR; /* 如果没找到,返回错误信息 */else  return i;  /* 找到后返回的是存储位置 */
}/* 插入 */
/*注意:这里P是存储下标位置(从0开始)*/
bool Insert( List L, ElementType X, Position P ) 
{ /* 在L的指定位置P前插入一个新元素X */Position i;if ( L->Last == MAXSIZE-1) {/* 表空间已满,不能插入 */printf("表满"); return false; }  if ( P<0 || P>L->Last+1 ) { /* 检查插入位置的合法性 */printf("位置不合法");return false; } for( i=L->Last; i>=P; i-- )L->Data[i+1] = L->Data[i]; /* 将位置P及以后的元素顺序向后移动 */L->Data[P] = X;  /* 新元素插入 */L->Last++;       /* Last仍指向最后元素 */return true; 
} /* 删除 */
/*注意:这里P是存储下标位置(从0开始)/
bool Delete( List L, Position P )
{ /* 从L中删除指定位置P的元素 */Position i;if( P<0 || P>L->Last ) { /* 检查空表及删除位置的合法性 */printf("位置%d不存在元素", P ); return false; }for( i=P+1; i<=L->Last; i++ )L->Data[i-1] = L->Data[i]; /* 将位置P+1及以后的元素顺序向前移动 */L->Last--; /* Last仍指向最后元素 */return true;   
}

线性表的链式存储实现

不要求逻辑上相邻的两个元素物理上也相邻;通过“链”建 立起数据元素之间的逻辑关系。
插入、删除不需要移动数据元素,只需要修改“链”。
访问序号为 i 的元素? 求线性表的长度?

int  Length ( List  PtrL ) {    List  p = PtrL;       /* p指向表的第一个结点*/ int  j = 0;      while ( p ) {             p = p->Next;             j++;    /* 当前p指向的是第 j 个结点*/      }         return  j; 
}
typedef struct LNode *PtrToLNode;
struct LNode {ElementType Data;PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;/* 查找 */
#define ERROR NULLPosition Find( List L, ElementType X )
{Position p = L; /* p指向L的第1个结点 */while ( p && p->Data!=X )p = p->Next;/* 下列语句可以用 return p; 替换 */if ( p )return p;elsereturn ERROR;
}/* 带头结点的插入 */
/*注意:这里P是链表结点指针,在P之前插入新结点 */
bool Insert( List L, ElementType X, Position P )
{ /* 这里默认L有头结点 */Position tmp, pre;/* 查找P的前一个结点 */        for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ;            if ( pre==NULL ) { /* P所指的结点不在L中 */printf("插入位置参数错误\n");return false;}else { /* 找到了P的前一个结点pre *//* 在P前插入新结点 */tmp = (Position)malloc(sizeof(struct LNode)); /* 申请、填装结点 */tmp->Data = X; tmp->Next = P;pre->Next = tmp;return true;}
}/* 带头结点的删除 */
/*注意:在删除位置参数P上与课程视频有所不同,课程视频中i是序列位序(从1开始),这里P是拟删除结点指针 */
bool Delete( List L, Position P )
{ /* 这里默认L有头结点 */Position tmp, pre;/* 查找P的前一个结点 */        for ( pre=L; pre&&pre->Next!=P; pre=pre->Next ) ;            if ( pre==NULL || P==NULL) { /* P所指的结点不在L中 */printf("删除位置参数错误\n");return false;}else { /* 找到了P的前一个结点pre *//* 将P位置的结点删除 */pre->Next = P->Next;free(P);return true;}
}

广义表(Generalized List)
广义表是线性表的推广
对于线性表而言, n个元素都是基本的单元素;
广义表中,这些元素不仅可以是单元素也可以是另一个广义表
这里写图片描述
多重链表
链表中的节点可能同时隶属于多个链
多重链表中结点的指针域会有多个,如前面例子包含了Next和 SubList两个指针域;但包含两个指针域的链表并不一定是多重链表,比如在双向链表 不是多重链表。
多重链表有广泛的用途: 基本上如树、图这样相对 复杂的数据结构都可以采 用多重链表方式实现存储。

这里写图片描述

矩阵可以用二维数组表示,但二维数组表示有两个缺陷:
数组的大小需要事先确定,对于“稀疏矩阵 ”,将造成大量的存储空间浪费
采用一种典型的多重链表——十字链表来存储稀疏矩阵
只存储矩阵非0元素项结点的数据域:行坐标Row、列坐标Col、数值Value
每个结点通过两个指针域,把同行、同列串起来;
行指针(或称为向右指针)Right
列指针(或称为向下指针)Down

这里写图片描述
用一个标识域Tag来区分头结点和非0元素结点:
头节点的标识值为“Head”,矩阵非0元素结点的标识值为“Term”。
这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

md 生成目录 码云_搭建简易博客方案

现在大家都喜欢用markdown来写技术博客&#xff0c;这篇文章将阐述搭建支持markdown的简易博客方法。我的写作需求通过阅读本文&#xff0c;您将学会搭建满足以下条件的博客&#xff1a;博客只用书写markdown文件能支持版本控制免费&#xff0c;不需要租服务器或主机编写、部署…

mix2s android p功能,已升安卓P!网友:MIX2S才是亲儿子

原标题&#xff1a;已升安卓P&#xff01;网友&#xff1a;MIX2S才是亲儿子一直以来&#xff0c;小米在手机系统更新上都有着非常明显的优势&#xff0c;MIUI经过了多年的更新迭代&#xff0c;如今已经达到了非常不错的易用性&#xff0c;而且流畅度方面的表现更是优秀。如今小…

python爬取图片的步骤_Python爬取图片的过程分析

一、获取网页源码二、数据解析&#xff0c;得到图片的地址、部分文字作为文件名三、返回图片的二进制字节码四、保存图片文件到本地import requestsfrom lxml import etreeimport osheaders {User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36…

堆栈总结

堆栈什么是堆栈堆栈的抽象数据类型描述栈的顺序存储实现 堆栈 什么是堆栈 计算机如何进行表达式求值&#xff1f; 算术表达式56/2-3*4。 正确理解&#xff1a; 56/2-3*4 53-3*4 8-3*4 8-12 -4 由两类对象构成的&#xff1a; 运算数&#xff0c;如2、3、4 运算符号…

nfc sim android8,Android NFC相关资料之MifareClassic卡(读写)

from: http://wszf.net/archives/2012/11/07/80510.html一般来说&#xff0c;给予MifareClassic的射频卡&#xff0c;一般内存大小有3种&#xff1a;1K: 16个分区(sector)&#xff0c;每个分区4个块(block)&#xff0c;每个块(block) 16个byte数据2K: 32个分区&#xff0c;每个…

android8 通知呼吸灯_Android8.0及以上的Notification

这篇文章上次修改于 702 天前&#xff0c;可能其部分内容已经发生变化&#xff0c;如有疑问可询问作者。在新版本上(Android8.0及以上)开发时&#xff0c;会遇到一些问题&#xff0c;比如&#xff0c;不显示通知&#xff0c;Notification 声音不可控&#xff0c;删除 channel 删…

harmonyos公测招募,nova为主 HarmonyOS 2.0开发者Beta公测再招募

原标题&#xff1a;nova为主 HarmonyOS 2.0开发者Beta公测再招募HarmonyOS 2.0开发者Beta公测招募将开启第二期&#xff0c;本次公测活动主要针对的机型是华为nova系列。活动报名时间为5月9日-5月17日。【PChome手机频道资讯报道】华为方面在4月份开启了HarmonyOS 2.0开发者Bet…

队列总结

什么是队列 队列(Queue)&#xff1a;具有一定操作约束的线性表 插入和删除操作&#xff1a;只能在一端插入&#xff0c;而在另一端删除 数据插入&#xff1a;入队列&#xff08;AddQ&#xff09; 数据删除&#xff1a;出队列&#xff08;DeleteQ&#xff09; 先来先服务 先…

python连接mongodb进行查询_Python中的MongoDB基本操作:连接、查询实例

这篇文章主要介绍了Python中的MongoDB基本操作&#xff1a;连接、查询实例,本文直接给出操作示例代码,需要的朋友可以参考下MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是高性能、易部署、易使用&#…

D P- 免费馅饼

题目 都说天上不会掉馅饼&#xff0c;但有一天gameboy正走在回家的小径上&#xff0c;忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了&#xff0c;这馅饼别处都不掉&#xff0c;就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&#xff0c;所以ga…

android+录像中截图软件下载,录屏截图大师app

录屏截图大师app是一款专业录屏软件&#xff0c;不少用户可能会有使用手机录屏的需求&#xff0c;尤其是在手机内置没有录屏功能的时候&#xff0c;这款软件就非常值得大家考虑&#xff0c;支持自定义设置录屏的大小和画质&#xff0c;还没有水印&#xff0c;还支持后期的简单编…

python随机函数笔记_Python笔记__random

random模块提供了随机数相关的一些函数&#xff0c;所有函数都绑定在一个random.Random类的实例上&#xff0c;所以&#xff0c;你可以直接用模块级的函数random.xxx()&#xff0c;也可以random.Random().xxx()。random.random(): 随机生成一个[0.0, 1.0)范围内的浮点数。是下面…

一加桌面3.0 android8,一加手机XRemix6.0安卓8.1.0Beta2.0定制本地化增强适配归属农历等...

制作者&#xff1a;moonlight-roms基于版本&#xff1a;remix最新安卓8.1.0代码适合机型&#xff1a;一加手机X双网版/全网通版/E1001/E1003等/onyx注意事项&#xff1a;1.开机后语言设置&#xff1a;Settings-system-languageandinput-添加一个中文需要并拖动到第一行设置为默…

震惊!Fibonacci Again

题目 There are another kind of Fibonacci numbers: F(0) 7, F(1) 11, F(n) F(n-1) F(n-2) (n>2). Input Input consists of a sequence of lines, each containing an integer n. (n < 1,000,000). Output Print the word “yes” if 3 divide evenly into …

jumpserver 使用教程_Jumpserver之快速入门

一&#xff0c;系统设置1.1基本设置修改 url 的"localhost"为你的实际 url 地址, 否则邮件收到的地址将为"localhost" 也无法创建新用户1.2邮件设置1.3终端设置保持默认设置即可1.4安全设置根据需要设置二.用户管理2.1创建jumpserver用户#点击页面左侧&quo…

华为鸿蒙手机和电视通话,鸿蒙智慧屏首秀:逾10万人预定,电视视频通话功能强大...

原标题&#xff1a;鸿蒙智慧屏首秀&#xff1a;逾10万人预定&#xff0c;电视视频通话功能强大上周五&#xff0c;大家期待已经的华为开发者大会正式召开&#xff0c;华为鸿蒙系统在这一天对外发布。历时数年&#xff0c;经过几千人的研发&#xff0c;终于正式落地。曾经&#…

震惊! Leftmost Digit

题目 Given a positive integer N, you should output the leftmost digit of N^N. Input The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contain…

ladp3 获取属性_Ldap3库使用方法(四)

#!/usr/bin/env python# -*- coding: utf-8 -*-import jsonfrom ldap3 import ALL_ATTRIBUTES# 注意&#xff1a;ldap3库如果要使用tls(安全连接)&#xff0c;需要ad服务先安装并配置好证书服务&#xff0c;才能通过tls连接&#xff0c;否则连接测试时会报LDAPSocketOpenError(…

两文本一图片android,Android富文本编辑器(二):图文混排以及图片上传处理

对于一个富文本编辑器来说&#xff0c;图文混排是最基本的功能。而从上一篇文章中我们知道图文混排需要使用ImageSpan。下面这段代码摘自我的RichEditText源码&#xff1a;/*** 添加图片* param filePath 图片文件路径*/public void addImage(String filePath) {SpannableStrin…

qt添加菜单纯代码_Qt Creator 插件开发(3):添加菜单项

本章我们将学习如何向 Qt Creator 的菜单栏添加内容。在上一章插件的基础之上&#xff0c;我们将尝试开发一个比较正式的插件——在菜单栏中可以看到&#xff0c;并且可以相应用户动作等。在我们开始之前&#xff0c;我们先来看看 Qt Creator 已有的菜单&#xff1a;Qt Creator…