实验五和六 线性结构之链表

实验五和六 线性结构之链表

 

 

课程《程序设计与数据结构》

班级:2023

姓名肖衍豪

学号:20202310

实验教师王志强

实验日期:2021年10月28日

必修/选修:必修

 

一、实验内容

1.链表练习,要求实现下列功能:

通过键盘输入一些整数,建立一个链表;

这些数是你学号中依次取出的两位数。 再加上今天的时间。

例如你的学号是 20172301

今天时间是 2018/10/116:23:49秒

数字就是

20, 17,23,1, 20, 18,10,1,16,23,49

打印所有链表元素, 并输出元素的总数。

在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是

int nZhangSan = 0; //初始化为 0.

做完这一步,把你的程序签入源代码控制(git push)。

2.链表练习,要求实现下列功能:

实现节点插入、删除、输出操作;

继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;

从磁盘读取一个文件, 这个文件有两个数字。

从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。

从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。

从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

3.链表练习,要求实现下列功能:

使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;

如果你学号是单数, 选择冒泡排序, 否则选择选择排序。

在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。

在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。

4.在android上实现实验(1)和(2)

5.在android平台上实现实验(3)

二、实验过程及其结果

1.链表练习,要求实现下列功能:

通过键盘输入一些整数,建立一个链表;

这些数是你学号中依次取出的两位数。 再加上今天的时间。

例如你的学号是 20172301

今天时间是 2018/10/1, 16:23:49秒

数字就是

20, 17,23,1, 20, 18,10,1,16,23,49

打印所有链表元素, 并输出元素的总数。

在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是

int nZhangSan = 0; //初始化为 0.

做完这一步,把你的程序签入源代码控制(git push)

该实验代码为:

import java.util.LinkedList;

import java.util.Scanner;

public class linkedhr1

{

    exp exp = new exp();

 

    Scanner scanner = new Scanner(System.in);

    System.out.println("输入你相应的学号、日期、时间三个数据");

    String string = scanner.nextLine();

    StringTokenizer stringTokenizer = new StringTokenizer(string);

        for(int i = 0; i<string.length();i++)

        {

        while (stringTokenizer.hasMoreTokens())

        {

            String f = stringTokenizer.nextToken();

            int num = Integer.parseInt(f);

            exp.add(num);

        }

        }

}

        System.out.println("打印出来所有元素:" + exp.toString() + "总数之和:" + exp.Size());    

实验截图如下:

 

2.链表练习,要求实现下列功能:

实现节点插入、删除、输出操作;

继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;

从磁盘读取一个文件, 这个文件有两个数字。

从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。

从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。

从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

实验代码如下:

public void insert( int data, int index)

        {

        NumberNode node = new NumberNode(data);

        NumberNode current = list;

        NumberNode precious = list;

        while (s!= index)

        {

        precious = current;

        current = current.next;

        s++;

        }

        node.next = current;

        precious.next = node;

        s = 0;

        nLudayue++;

        }

 

public void delete(int num)

        {

        NumberNode node = new NumberNode(num);

        NumberNode current, temp;

 

        if(list.Num == num)

        {

        current = list.next;

        list = current;

        }

        else

        {

        current = list;

        while(current.next.Num != num)

        current = current.next;

        temp = current.next.next;

        current.next = temp;

        }

 

        nLudayue --;

        }

public String toString()

        {

        String result = "";

 

        NumberNode current = list;

 

        while (current != null)

        {

        result += current.Num + " ";

        current = current.next;

 

        }

 

        return result;

        }  

 

实验截图如下:

 

 

3.链表练习,要求实现下列功能:

使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;

如果你学号是单数, 选择冒泡排序, 否则选择选择排序。

在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。

在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。

实验代码如下(选择排序):

import java.util.LinkedList;

import java.util.Scanner;

import java.util.Select;

public void Select()

        {

        NumberNode current;

        current = list;

        int[] A = new int[nLudayue];

        for(int i = 0; i < nLudayue; i++) {

        A[i] = current.Num;

        current = current.next;

        }

 

        int[] B = selectSort(A);

 

        list = null;

        int top2 = nLudayue;

        for(int i =0;i< top2; i++){

        int num = B[i];

        add(num);

        }

        }

public int[] selectSort(int[] list) {

        int min;

        int temp;

 

        for (int index = 0; index < list.length - 1; index++) {

        min = index;

        for (int scan = index + 1; scan < list.length; scan++)

        if (list[scan] - (list[min]) < 0)

        min = scan;

 

        temp = list[min];

        list[min] = list[index];

        list[index] = temp;

 

        }

        return list;

        }

实验截图:

 

 

三、实验感悟

安卓studio安装中遇到遇到了较大的困难,在安卓模拟器上进行实验的任务暂时无法完成。

 

 

 

 

posted @ 2021-11-07 23:16  20202310肖衍豪  阅读(37)  评论(0编辑  收藏  举报