以前写博客,为了增加关注度,现在呢?写给自己
线性表是一种典型的线性结构,是最简单、最常用的数据结构,比如栈、队列都可以说是线性表.
逻辑结构:
由n个数据元素构成,对于非空的来说,有且只有一个开始结点,有且只有一个尾巴结点,内部结点有且只有一个直接前驱,和一个直接后驱。同一个线性表内部的数据元素的类型相同,每个元素的数据元素相同
数据操作:
初始化、计算表长、获取结点、查找结点、插入结点、删除结点
存储:
1.顺序存储:
构造数据元素:
public class DATA { String key;//结点的关键字 String name; int age; }
构造线性表:
/** * 主要用于定义顺序表结构 * @author Administrator * */ public class SLType { static final int MAXLEN=100; DATA[] ListData =new DATA[MAXLEN+1];//定义顺序表的结构数组 int ListLen;//顺序表已存结点的数量 void SLInit(SLType SL){ //初始化顺序表 SL.ListLen=0;//初始化为空表 } int SLLength(SLType SL){ return (SL.ListLen); //返回顺序表的元素数量 } int SLInsert(SLType SL,int n,DATA data){ int i; if(SL.ListLen>=MAXLEN){ System.out.print("顺序表已满,不能插入结点!\n"); return 0; } if(n<1||n>SL.ListLen-1){//插入结点序号不正确 System.out.print("插入元素序号错误,不能插入元素!\n"); return 0; } for(i=SL.ListLen;i>=n;i--){ SL.ListData[i+1]=SL.ListData[i]; } SL.ListData[n]=data; SL.ListLen++; return 1; } int SLAdd(SLType SL,DATA data){//增加元素到顺序表的尾部 if(SL.ListLen>=MAXLEN){ //顺序表已经满了 System.out.println("顺序表已满,不能在加结点了"); return 0; } SL.ListData[++SL.ListLen]=data; return 1; } int SLDelete(SLType SL,int n){ //删除顺序表中的数据元素 int i; if(n<1||n>SL.ListLen+1){ System.out.println("删除结点序号错误,不能删除成功!\n"); return 0; } for(i=n;i<SL.ListLen;i++){ SL.ListData[i]=SL.ListData[i+1]; } SL.ListLen--; return 1; } DATA SLFindByNum(SLType SL,int n){ if(n<1||n>SL.ListLen+1){ System.out.println("结点序号错误,不能返回结点!\n"); return null; } return SL.ListData[n]; } int SLFindByCount(SLType SL,String key){ int i; for(i=1;i<=SL.ListLen;i++){ if(SL.ListData[i].key.compareTo(key)==0){ return i; } } return 0; } int SLALL(SLType SL){ //显示顺序表中的所有结点 int i; for(i=1;i<=SL.ListLen;i++){ System.out.print("{"+SL.ListData[i].key+","+ SL.ListData[i].name+","+SL.ListData[i].age+"}"); } return 0; } }
.....
测试结果:
以前老是看不懂,明明知道数据结构是基础,很重要的,今天突然就明白了,呵.
相关推荐
从键盘输入数据,建立两个有序线性表(每个线性表的输入数据按由小到大次序输入来建立线性表,不必考虑排序算法);输出建好的这两个有序线性表;将这两个有序线性表归并为一个有序线性表;输出归并后的有序线性表。 ...
初始化线性表 *\n"; cout* 2.删除线性表中所有元素 *\n"; cout* 3.得到线性表的长度 *\n"; cout* 4.检查线性表是否为空 *\n"; cout* 5.得到线性表中指定序号元素 *\n"; cout* 6.遍历一个线性表 *\n"; cout* 7....
#define LIST_INIT_SIZE 5 //线性表存储空间的初始分配量 #define LISTINCREMENT 1 //线性表存储空间分配增量 typedef int Status; //函数类型,其值为为函数结果状态代码 typedef int ElemType; //假设数据...
2、 掌握线性表的基本操作:初始化,插入,删除,查找,判空,求线性表长度等运算在顺序存储结构和链式存储结构上的实现。 3、 通过本章实验帮助学生加深对C语言的使用(特别是函数的参数调用、指针类型的应用)。 ...
线性表结构实验 1.实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。 (2)掌握线性表的顺序存储结构的定义及C语言实现。 (3)掌握线性表在顺序存储结构即顺序表中的各种基本操作。 2.问题描述...
数据结构_线性表的链式存储 实验目的 1. 掌握线性表的链式存储结构。 2. 能熟练地利用链式存储结构实现线性表的基本操作。 3. 能熟练地掌握链式存储结构中算法的实现。 实验内容 1. 分别用头插法和尾插法建立带头...
1、 创建线性表类。线性表的存储结构使用链表。 2、 提供操作:自表首插入元素、删除指定元素、搜索表中是否有指定元素、输出链表。 3、 接收键盘录入的一系列整数(例10,25,8,33,60)作为节点的元素值,创建链表。...
从键盘输入数据,建立两个有序线性表(每个线性表的输入数据按由小到大次序输入来建立线性表,不必考虑排序算法);输出建好的这两个有序线性表;将这两个有序线性表归并为一个有序线性表;输出归并后的有序线性表。 ...
根据线性表的抽象数据类型的定义,选择下面任一种链式结构实现线性表,并完成线性表的基本功能。线性表存储结构(五选一):1、 带头结点的单链表2、 不带头结点的单链表3、 循环链表4、 双链表5、 静态链表线性表的...
试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1,a2...,an)逆置为(an,an-1,...,a1)。 选题9:(难)单链表拆分。 将带头结点的单链表LA中分拆成LB和LC两条单链表,LA中的data域...
实验目的:掌握线性表的基本结构和操作方法,培养灵活使用表解决实际问题的能力。 实验内容: 一条记录有学号和成绩两个数据项,按成绩由大到小建立两个有序表(分别顺序表和链式表实现),并合并成一个有序表(有...
将这个线性表拆分成一个奇数线性表和一个偶数线性表线,性表的最大长度为20.
该文件包括各种线性表的头文件,另外还实现了简单单链表、简单顺序线性表、从A链表中删除B和C链表共有的元素、单链表逆置(以整数为例)、将链表中元素按递增排序并删除所选定范围内的元素、求一个新的集合A为A和B的...
数据结构线性表实验源代码,绝对好用. #define list_init_size 100 #define listcrement 10 #include #include typedef struct { int *elem; int length; int listsize; }sqlist; //构造一个空的线性表 int ...
数据结构实验报告(1) 学院: 专业: 班级: "姓名 " "学号 " "实验组" " "实验时间 "2011-10-28 "指导教师" "成绩 " " "实验项目名称 "线性表的顺序存储结构 " "实 "1. 熟练掌握线性表的基本操作在顺序存储和链式...
1、选择顺序或链式存储结构实现线性表的基本操作 2、采用顺序或链式存储方式存储线性表,在此基础上实现线性表的各个操作,以及线性表的合并操作
JAVA线性表JAVA线性表JAVA线性表JAVA线性表
线性表的顺序存储,此程序主要实现线性表的顺序存储,有C++语言实现,还是比较轻易看得懂的!
使用C++类模板实现了线性表的链式存储结构(链表),类中包含了线性表的常用方法:向线性表中插入一个元素、删除一个元素、清空线性表、获取一个元素、获取线性表长度等。大致实现了STL中的链表的基本功能,通过对比...