
朕用的是java语言,有关于java语言的线性表操作细则如下:
然后java的线性表的两种实现:有顺序实现和链式实现。
线性表的两种实现
|
顺序表
|
链表
|
空间性能
|
顺序表的存储空间是静态分布的,需要一个固定的数组,总有部分数组元素要浪费
|
链表的存储空间是动态分布,因此不会有空间被浪费。但由于链表需要额外的空间来为每个节点保存指针,因此也要牺牲一部分空间。
|
时间性能
|
顺序表中的元素的逻辑顺序和物理存储顺序保持一致,而且支持随机存取。因此顺序表在查找,读取时候效率很快。
|
链表采用链式结构来保存表内的元素,因此在插入、删除的时候效率比较高。
|
线性表本质上是一个充当容器的工具类,当程序有一组结构相同的数据元素需要保存的时候,就可以考虑使用线性表来保存。
Java中经常使用的线性表是list,Java中list接口就是代表线性表,线性表中常见的两种实现分别是ArrayList和LinkedList,其中LinkedList是一个双向链表,而ArrayList是动态数组来实现。
根据上面的区别很容易得到下面的结论:
ArrayList实现原理是数组,有点在于遍历查找速度很快,但是对于插入和删除效率不高。
LinkedList的实现就是链表遍历和查找速度不高,但是插入和删除的效率很高。
下面是有关于实验一的东西:
实验内容:
建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。

-
package cn.itcast;
-
-
import java.util.*;
-
-
public class List {
-
public static void main(String[] args) {
-
ArrayList list = new ArrayList();
-
for (int i = 0; i < 9; ++i) {
-
list.add("null");
-
}
-
Scanner sc = new Scanner(System.in);
-
-
while (true) {
-
System.out.println("1增加数据2删除数据3查找某个位置的数据4看全部数据");
-
String choiceString = sc.nextLine();
-
switch (choiceString) {
-
-
case "1":
-
System.out.println("输入你要增加的数字");
-
int num = sc.nextInt();
-
System.out.println("输入你要增加的位置");
-
int num1 = sc.nextInt();
-
if (num1 < 0 || num1 > 9) {
-
System.out.println("你输的数字有误");
-
break;
-
}
-
list.add(num1, num + 1);
-
break;
-
case "2":
-
System.out.println("输入你要删除的数字的位置");
-
int num3 = sc.nextInt();
-
if (num3 < 0 || num3 > 9) {
-
System.out.println("你输的数字有误");
-
break;
-
}
-
list.remove(num3);
-
break;
-
case "3":
-
System.out.println("输入你要查找的数字的位置");
-
int num4 = sc.nextInt();
-
if (num4 < 0 || num4 > 9) {
-
System.out.println("你输的数字有误");
-
break;
-
}
-
int find = (int) list.get(num4);
-
break;
-
case "4":
-
Iterator it = list.iterator();
-
while (it.hasNext()) {
-
System.out.println(it.next());
-
}
-
break;
-
}
-
}
-
}
-
}<span style="color:#ff0000;font-weight: bold;">
-
</span>

然后就是约瑟夫环:
什么是约瑟夫环?
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。
-
package cn.itcast;
-
import java.util.ArrayList;
-
import java.util.List;
-
import java.util.Scanner;
-
-
-
public class Joseph_problem {
-
public static void main(String[] args) {
-
Scanner scanner = new Scanner(System.in);
-
System.out.print("请输入总人数:");
-
int totalNum = scanner.nextInt();
-
System.out.print("请输入报数的大小:");
-
int cycleNum = scanner.nextInt();
-
System.out.print("请输入开始编号:");
-
int startNO= scanner.nextInt();
-
yuesefu(totalNum, cycleNum,startNO);
-
yuesefu(5, 2,3);
-
}
-
-
public static void yuesefu(int totalNum, int countNum,int startNO) {
-
// 初始化人数
-
List<Integer> start = new ArrayList<Integer>();
-
for (int i = 1; i <= totalNum; i++) {
-
start.add(i);
-
}
-
//从下标为K开始计数
-
int k = startNO-1;
-
while (start.size() >0) {
-
System.out.println(start);
-
//第m人的索引位置
-
k = (k + countNum) % (start.size()) - 1;
-
// 判断是否到队尾 到队尾时候k=-1
-
if (k < 0) {
-
System.out.println(start.get(start.size()-1));
-
start.remove(start.size() - 1);
-
k = 0;
-
} else {
-
System.out.println(start.get(k));
-
start.remove(k);
-
}
-
}
-
}
-
}