爹地的实验:实验一: 数据结构实验一线性表的基本操作实现及其应用



朕用的是java语言,有关于java语言的线性表操作细则如下:

然后java的线性表的两种实现:有顺序实现和链式实现。

线性表的两种实现

 

顺序表

链表

空间性能

顺序表的存储空间是静态分布的,需要一个固定的数组,总有部分数组元素要浪费

链表的存储空间是动态分布,因此不会有空间被浪费。但由于链表需要额外的空间来为每个节点保存指针,因此也要牺牲一部分空间。

时间性能

顺序表中的元素的逻辑顺序和物理存储顺序保持一致,而且支持随机存取。因此顺序表在查找,读取时候效率很快。

链表采用链式结构来保存表内的元素,因此在插入、删除的时候效率比较高。

线性表本质上是一个充当容器的工具类,当程序有一组结构相同的数据元素需要保存的时候,就可以考虑使用线性表来保存。

Java中经常使用的线性表是list,Java中list接口就是代表线性表,线性表中常见的两种实现分别是ArrayList和LinkedList,其中LinkedList是一个双向链表,而ArrayList是动态数组来实现。

根据上面的区别很容易得到下面的结论:

ArrayList实现原理是数组,有点在于遍历查找速度很快,但是对于插入和删除效率不高。

LinkedList的实现就是链表遍历和查找速度不高,但是插入和删除的效率很高。

下面是有关于实验一的东西:

实验内容:

建立 n 个元素的顺序表(n 的大小和表里数据自己确定),实现相关的操作:输出,插入,删除,查找等功能。编写完整程序实现,程序语言不限定,使用技术形式不定。


[java]  view plain  copy
  1. package cn.itcast;  
  2.   
  3. import java.util.*;  
  4.   
  5. public class List {  
  6.     public static void main(String[] args) {  
  7.         ArrayList list = new ArrayList();  
  8.         for (int i = 0; i < 9; ++i) {  
  9.             list.add("null");  
  10.         }  
  11.         Scanner sc = new Scanner(System.in);  
  12.   
  13.         while (true) {  
  14.             System.out.println("1增加数据2删除数据3查找某个位置的数据4看全部数据");  
  15.             String choiceString = sc.nextLine();  
  16.             switch (choiceString) {  
  17.   
  18.             case "1":  
  19.                 System.out.println("输入你要增加的数字");  
  20.                 int num = sc.nextInt();  
  21.                 System.out.println("输入你要增加的位置");  
  22.                 int num1 = sc.nextInt();  
  23.                 if (num1 < 0 || num1 > 9) {  
  24.                     System.out.println("你输的数字有误");  
  25.                     break;  
  26.                 }  
  27.                 list.add(num1, num + 1);  
  28.                 break;  
  29.             case "2":  
  30.                 System.out.println("输入你要删除的数字的位置");  
  31.                 int num3 = sc.nextInt();  
  32.                 if (num3 < 0 || num3 > 9) {  
  33.                     System.out.println("你输的数字有误");  
  34.                     break;  
  35.                 }  
  36.                 list.remove(num3);  
  37.                 break;  
  38.             case "3":  
  39.                 System.out.println("输入你要查找的数字的位置");  
  40.                 int num4 = sc.nextInt();  
  41.                 if (num4 < 0 || num4 > 9) {  
  42.                     System.out.println("你输的数字有误");  
  43.                     break;  
  44.                 }  
  45.                 int find = (int) list.get(num4);  
  46.                 break;  
  47.             case "4":  
  48.                 Iterator it = list.iterator();  
  49.                 while (it.hasNext()) {  
  50.                     System.out.println(it.next());  
  51.                 }  
  52.                 break;  
  53.             }  
  54.         }  
  55.     }  
  56. }<span style="color:#ff0000;font-weight: bold;">  
  57. </span>  


然后就是约瑟夫环:

什么是约瑟夫环?

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后 结果+1即为原问题的解。

[java]  view plain  copy
  1. package cn.itcast;  
  2. import java.util.ArrayList;  
  3. import java.util.List;  
  4. import java.util.Scanner;  
  5.   
  6.      
  7. public class Joseph_problem {    
  8.     public static void main(String[] args) {    
  9.        Scanner scanner = new Scanner(System.in);    
  10.        System.out.print("请输入总人数:");    
  11.         int totalNum = scanner.nextInt();    
  12.         System.out.print("请输入报数的大小:");    
  13.       int cycleNum = scanner.nextInt();    
  14.        System.out.print("请输入开始编号:");    
  15.        int  startNO= scanner.nextInt();    
  16.         yuesefu(totalNum, cycleNum,startNO);    
  17.         yuesefu(52,3);    
  18.     }    
  19.      
  20.    public static void yuesefu(int totalNum, int countNum,int startNO) {    
  21.         // 初始化人数    
  22.         List<Integer> start = new ArrayList<Integer>();    
  23.         for (int i = 1; i <= totalNum; i++) {    
  24.             start.add(i);    
  25.         }    
  26.         //从下标为K开始计数    
  27.         int k = startNO-1;    
  28.         while (start.size() >0) {    
  29.             System.out.println(start);  
  30.             //第m人的索引位置    
  31.             k = (k + countNum) % (start.size()) - 1;    
  32.            // 判断是否到队尾  到队尾时候k=-1  
  33.             if (k < 0) {    
  34.                 System.out.println(start.get(start.size()-1));    
  35.                 start.remove(start.size() - 1);    
  36.                 k = 0;    
  37.             } else {    
  38.                 System.out.println(start.get(k));    
  39.                 start.remove(k);    
  40.             }    
  41.         }    
  42.     }    
  43. }  

猜你喜欢

转载自blog.csdn.net/My_son_is_xuzihao/article/details/78057674