朕用的是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);
- }
-
- int k = startNO-1;
- while (start.size() >0) {
- System.out.println(start);
-
- k = (k + countNum) % (start.size()) - 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);
- }
- }
- }
- }