数据结构与算法——9.线性表中单链表的应用

题目要求

在这里插入图片描述

窗体界面

在这里插入图片描述

C++代码和解题思路

完整的工程项目的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClassLibrary1;
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        private CityList list = new CityList();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            City data = this.makeData();
            this.list.InsertAtFirst(data);
            this.Update();
        }

        private City makeData()
        {
            string name = textBox1.Text;
            int x = 0;
            int y = 0;
            try
            {
                x = Convert.ToInt32(textBox2.Text);
                y = Convert.ToInt32(textBox3.Text);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            City city = new City(x, y, name);
            return city;
        }

        private void Update()
        {
            listBox1.Items.Clear();
            for (int i = 0; i < this.list.length; i++)
            {
                City childData = list[i];
                listBox1.Items.Add(list[i].name + "\t" + list[i].X + "\t" + list[i].Y + "\n");
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            City data = this.makeData();
            this.list.InsertAtRear(data);
            this.Update();
        }
        public void button3_Click(object sender, EventArgs e)
        {
                   try
                   {
                       City data = this.makeData();
                       int index = Convert.ToInt32(textBox4.Text);
                       this.list.Insert(index, data);
                   }
                   catch (Exception ex) 
                   {
                       MessageBox.Show(ex.Message);
                   }
                   this.Update();
                }

        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
                int index = Convert.ToInt32(textBox4.Text);
                this.list.Remove(index);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            this.Update();

        }

        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                City data = this.makeData();
                int index = Convert.ToInt32(textBox4.Text);
                list[index] = data;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            this.Update();
        }
        private void button6_Click(object sender, EventArgs e)
        {
            string name = textBox4.Text;
            City data = this.list.Search(name);
            if (data == null)
            {
                MessageBox.Show("并没有该城市");
            }
            else
            {
                textBox5.Text = data.X.ToString();
                textBox6.Text = data.Y.ToString();
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
          listBox2.Items.Clear();
               try
               {
                   int pointX = Convert.ToInt32(textBox7.Text);
                   int pointY = Convert.ToInt32(textBox8.Text);
                   int distance = Convert.ToInt32(textBox9.Text);
                   this.list.SearchCity(distance, pointX, pointY);
                   int len = this.list.dataInfo.Length;
                   string str = "";
                   for (int i = 0; i < len; i++) 
                   {
                       if (list.dataInfo[i] != null) {
                           str += list.distances[i].ToString("0.00") + "\t" +list.dataInfo[i].name + "\t" + list.dataInfo[i].X + "\t" + list.dataInfo[i].Y + "\n";                
                       }
                       listBox2.Text = str;

                   }
               }
               catch (Exception ex)
               {
                   MessageBox.Show(ex.Message);
               }

        }
      }
 }
城市列表,实现查找城市
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CityList
{
    public class CityList2 : SLinkList<City>
    {
        public City[] dataInfo = new City[100];
        public double[] distances = new double[100];
        private int CDLen = 0;
        public City Search(string name)
        {
            SNode<City> temp = this.pHead;
            for (int i = 0; i < this.length; i++)
            {
                if (temp.Data.name == name)
                {
                    return Locate(i).Data;
                }
                temp = temp.Next;
            }
            return null;
        }

        public void SearchCity(int distance, int pointX, int pointY)
        {
            SNode<City> temp = this.pHead;
            for (int i = 0; i < this.length; i++)
            {
                double dis = Math.Sqrt(Math.Pow((temp.Data.X - pointX), 2) + Math.Pow((temp.Data.Y - pointY), 2));
                if (dis <= distance)
                {
                    dataInfo[this.CDLen++] = temp.Data;
                    distances[this.CDLen - 1] = dis;
                }
                temp = temp.Next;
            }
        }

        public SNode<City> pHead { get; set; }
    }
}
对单链的处理,删除、头插、尾插、插入、更新。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CityList
{
    public class SLinkList<T>:ILinearList<T>where T:IComparable<T>
    {
        public SNode<T> phead;
        public int length;
        public T this[int index] 
        {
            get
            {
                if (index < 0 || index > length - 1)
                    throw new ArgumentOutOfRangeException();
                return Locate(index).Data;
            }
            set
            {
                if (index < 0 || index > length - 1)
                    throw new ArgumentOutOfRangeException();
                Locate(index).Data = value;
            }
        
        }
        public void SLinklist()
        {
            phead = null ;
            length = 0;
        }
        public SNode<T> Locate(int index)
        {
            if(index<0||index>length-1)
                throw new ArgumentOutOfRangeException();
            SNode<T>temp = phead ;
            for (int i=0;i<index;i++)
            {
                temp = temp.Next;
            }
            return temp;
        }
        public void InsertAtFirst(T data)
        {
            if(length==0)
                phead =new SNode<T>(data);
            else 
                phead =new SNode<T>(data,phead);
            length++;
        }
        public void InsertAtRear(T data)
        {
            if(length==0)
                phead =new SNode<T>(data);
            else 
                Locate(length -1).Next  =new SNode<T>(data);
            length ++;
        }
        public void Clear()
        {
            phead = null;
            length = 0;
        }
        public void Insert(int index,T data)
        {
            if(index<0||index>length)
                throw new ArgumentOutOfRangeException();
            if(index==0)
                InsertAtFirst(data);
            else if(index ==length)
                InsertAtRear(data);
            else
            {    
                SNode<T>temp =Locate(index-1);
                temp.Next  = new SNode<T> (data,temp.Next);
                length ++;
            }
        }
        public void Remove(int index)
        {
            if (index < 0 || index > length - 1)
                throw new ArgumentOutOfRangeException();
            if (index == 0)
                phead = phead.Next;
            else
            {
                SNode<T> temp = Locate(index - 1);
                temp.Next = temp.Next.Next;
                length--;
            }
        }
    }
}
SLinkList接口
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CityList
{
    public interface  ILinearList<T>
    {

        T this[int index] { get; set; }

        void Insert(int index, T data);

        void Remove(int index);
        
    }
}
结点的模板,定义了结点类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CityList
{
    public class SNode<T>where  T:IComparable<T>
    {
        public T Data { get; set; }

        public SNode<T> Next{get;set;}

        public SNode(T data)
        {
            Data = data;
            Next = null;
        }
        public SNode(T data,SNode<T> next)
        {
            Data = data;
            Next = next;
        }
    }
}
对城市的实体化
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CityList
{
    public class City:IComparable<City>
    {
        public int X;
        public int Y;
        public string name;
        public City(int x, int y, string name)
        {
            this.X = x;
            this.Y = y;
            this.name = name;
        }
        public int compareto(City other)
        {
            return other.name == name ? 0 : -1;
        }

    }
}

建的类库与任务

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值