线性表是最简单和最常用的一种数据结构,它是有n个体数据元素(节点)组成的有限序列。其中,数据元素的个数n为表的长度,当n为零时成为空表,非空的线性表通常记为:
(a1, a2,…, ai-1 ai人工智能+ 1,…,一个)
线性表的顺序存储指的是将线性表的数据元素按其逻辑次序依次存入一组地址连续的存储单元里,用这种方法存储的线性表称为顺序表。
<强> 1。顺序表的结构定义强>
公开课SeqList {/*初始空间为10 */私有静态最终int LIST_SIZE=10;/*数组数据用来存放元素*/私人int[]数据;/*当前表长,实际存储元素的个数*/私人int长度; } >之前<强> 2。插入运算强>
顺序表的插入运算是指在线性表的第张个元素和第i个元素之间插入一个新元素,由于顺序表逻辑上相邻的元素在物理结构上也相邻,其物理存储关系也要发生相应的变化。除非我=n + 1,否则必须将原顺序表的第i个元素开始的所有元素分别向后移动1个位置。
/* * 我*在顺序表列表中第个位置之前插入一个新元素节点 * @param列表顺序表 * @param我插入位置 *新@param节点元素 */公共空间insertList (SeqList列表,int, int节点){ 如果我& lt;1 | |我比;列表。长度+ 1){ system . out。println(“位置误差”); 返回; } 如果列表。长度在=LIST_SIZE) { System.out.println(“溢出”); 返回; } for (int j=列表。长度- 1;j祝辞=i - 1;j () {/*从最后一个元素开始逐一后移*/列表。数据[j + 1]=list.data [j]; }/*插入新元素*/列表。数据(张)=节点; *//*表长加1 列表。长度+ +; } >之前<强> 3。删除运算强>
顺序表的删除运算指的是将表中第i个元素删除,与插入运算相反,插入是向后移动元素,删除运算则是向前移动元素。
/* * *在顺序表列表中删除第i个元素,并返回被删除的元素 * @param列表顺序表 * @param我元素位置 * @return节点 */公共int deleteList (SeqList列表,int i) { int节点=0; 如果我& lt;0 | |我比;list.length) { system . out。println(“位置误差”); 返回节点; } 节点=list.data(张); for (int j=我;j & lt;list.length;j + +) {/*元素前移*/列表。数据(j - 1)=list.data [j]; } 列表。长度,; 返回节点; } >之前<强> 4。顺序表逆置强>
先以表长的一半为循环控制次数,将表中最后一个元素同顺序顺数第一个元素交换,将倒数第二个元素同顺数第二个元素交换,以此类推,直至交换完为止。
/* * *顺序表逆置 * @param列表原始顺序表 * @return逆置后的顺序表 */公共SeqList转换(SeqList列表){ int节点; int长度=list.length/2; for (int i=0;我& lt;长度;我+ +){/*对称交换元素*/int j=列表。长度- 1——我; 节点=list.data[我]; 列表。数据[我]=list.data [j]; 列表。数据[j]=节点; } 返回列表; } >之前
链式存储结构存储线性表数据元素的存储空间可能是连续的,也可能是不连续的,因而链表的节点是不可以随机存取的,链式存粗是最常见的存储方式之一。
在使用链式存储结构表示每个数据元素时,除了存储元素本身的信息外,还需要一个存储指示后继元素存储位置的地址,利用这种存储方式表示的线性表称为链表。
<强> 5。单链表的结构定义强>
公开课LinkList {/*数据域*/私人char数据;/*后继元素*/私人LinkList下; } >之前<强> 6。头插法建表算法强>
头插法是从一个空表开始,重复读入数据,生成新节点,将读入的数据存放到新节点的数据域中,然后将新节点插入到当前链表的表头上,直到结束为止。
/* * *头插法创建表 * @param字符字符数组 * @return单链表 */公共LinkList createListF (char[]是){ LinkList节点; LinkList头=零; (char ch:是){/*申请新节点*/节点=new LinkList (); 节点。数据=https://www.yisu.com/zixun/ch;/*指向后继节点*/节点。下一个=头; 头=节点; }/*返回头节点*/返回头; }java实现线性表及其算法