数据结构上机作业(一)

一.上机内容

1、实现顺序存储结构下线性表的基本操作,数据类型自己确定。
2、输入一组数据,建立带头结点的单链表,实现线性表的基本操作,线性表中数据元素的类型自己确定。
3、试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2…,an)逆置为(an,an-1…,a1)。
4、已知有序表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于 maxk的元素(若表中存在这样的元素)同时释放被删结点空间,并分析你所写的算法的时间复杂度(注意mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。
5、删除单链表中重复的元素,即留下单链表中值不相同的结点,并输出删除后单链表中的所有元素。
6*、某百货公司仓库中有一批电视机,试按价格从高到底的次序建立一个循环链表,每个结点有价格)数量和链指针三个域。现新到m台价格为h的电视机,修改原链表并输出修改后链表的所有内容。
7*、在理解一元多项式的加法算法基础上,编程实现一元多项式的减法。

二.代码实现

1.实现顺序存储结构下线性表的基本操作,数据类型自己确定
public class SqList<T> implements Ilist<T>{
   
    // 属性
    T[] array;
    int length;

    // 构造方法
    public SqList(int capacity) {
   
        this.array = (T[]) new Object[capacity];
        this.length = 0;
    }

    /**
     * 将顺序表置空
     */
    @Override
    public void clear() {
   
        this.length = 0;
    }

    /**
     * 判断顺序表是否为空
     * @return
     */
    @Override
    public boolean isEmpty() {
   
        return this.length==0;
    }

    /**
     * 返回顺序表的长度
     * @return
     */
    @Override
    public int getLength() {
   
        return this.length;
    }

    /**
     * 得到第i个元素
     * @param i
     * @return
     */
    @Override
    public T get(int i) throws Exception{
   
        if (i<0 || i>=this.length){
   
            throw new Exception("第 " + i +" 元素不存在");
        }
        return this.array[i];
    }

    /**
     * 在末尾插入元素
     * @param t
     */
    public void insert(T t) throws Exception {
   
        insert(this.length,t);
    }
    /**
     * 插入元素
     * @param i
     * @param t
     */
    @Override
    public void insert(int i, T t) throws Exception {
   
        // 这个length不是线性表的length,而是底层数组的length,因为不能超过底层数组的长度
        if (i == this.array.length){
   
            throw new Exception("长度已满,无法插入");
        }
        if (i<0 || i > this.length){
   
            throw new Exception("插入位置不合法,无法插入");
        }
        // 能运行到这,表示能够进行插入
        // 第i个元素及其后面的元素都要往后移动一位
        for (int j = this.length; j > i ; j--) {
   
            // 后一位等于前一位
            this.array[j] = this.array[j-1];
        }
        
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实验1: 1)熟悉Vc 6.0环境 2)用两种算法实现1-1/x+1/x*x-1/x*x*x+1/x*x*x*x…., 注(algo1-1,algo1-2) 实验2:线性表 1) 顺序表的合并:实现书中P26中算法2.7,La=1 2 3 4 5, Lb=2 4 6 8 10。要求得到合并后的Lc=1 2 3 4 5 6 8 10 注(algo2-4 ) 2) 一元多项式加法:Pa=Pa+Pb,并销毁一元多项式Pb 3) 一元多项式乘法:Pa=Pa*Pb,并销毁一元多项式Pb 实验3:栈和队列 1) 利用栈求解迷宫问题;行列各为10(包括外墙),迷宫内墙单元数为18。 2) 利用栈和递归求解Hanoi塔问题,圆盘数3。 3) 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径);行列各为5(包括外墙),迷宫内墙单元数为2。 实验4:串 1) 模式匹配改进算法:KMP算法,实现书中4.6,4.7,4.8算法。 实验5: 数组和广义表 1) 求稀疏矩阵的加,乘和转置矩阵。 2) 求广义表的深度。 实验6:树和二叉树 1) 求赫夫曼编码。(w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC) 实验7:图 1)实现教科书中图7.33的程序,并能求出任意两点的最短路径。 实验8:动态存储管理 1) 边界标识法,程序实现教科书中算法8.1 2) 伙伴系统,程序实现教科书中算法8.2 实验9:查找 1) 哈希表的查找及其分析:以书中图9-25为例。 实验10:内部排序 1) 以书中10-4的数据,程序实现直接插入排序,折半排序和2路插入排序。 2) 以书中图10.6的数据,程序实现快速排序。 3) 以书中图10.9的数据,程序实现树形选择排序。 4) 以书中图10.13的数据,程序实现归并排序。 5) 以书中图10.14的数据,程序实现链式基数排序。 实验11: 外部排序 1) 以书中图11.4的数据,程序实现多路平衡归并排序。 2)以书中图11.5的数据,程序实现置换-选择排序。 实验12:文件 1)以书中图12.4的数据,程序实现顺序文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值