题目
代码
IlinearList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace city
{
interface IlinearList<T> where T : IComparable<T>
{
int Length { get; }
T this[int index] { get; set; }
void Clear();
bool IsEmpty();
void Insert(int index, T data);
void Remove(int index);
}
}
Snode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace city
{
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;
}
}
}
SlinkList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace city
{
public class SLinkList<T> : IlinearList<T> where T : IComparable<T>
{
private SNode<T> _pHead;
private 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 int Length
{
get
{
return _length;
}
}
public SLinkList()
{
_pHead = null;
_length = 0;
}
public void InsertAtFirst(T data)
{
if (_length == 0)
{
_pHead = new SNode<T>(data, null);
}
else
{
_pHead = new SNode<T>(data, _pHead);
}
_length++;
}
private SNode<T> Locate(int index)
{
if (index < 0 || index > _length - 1)
throw new ArgumentOutOfRangeException();
SNode<T> temp = _pHead;
int i = 0;
for (; i < index; i++)
{
temp = temp.Next;
}
return temp;
}
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 bool IsEmpty()
{
return _length == 0;
}
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--;
}
}
}
CityNode.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace city
{
public class CityNode : IComparable<CityNode>
{
public string cname { get; set; }
public int cx { get; set; }
public int cy { get; set; }
public string Cname
{
get
{
return cname;
}
set
{
cname = value;
}
}
public int Cx
{
get
{
return cx;
}
set
{
cx = value;
}
}
public int Cy
{
get
{
return cy;
}
set
{
cy = value;
}
}
public CityNode(string cname, int cx, int cy)
{
this.cname = cname;
this.cx = cx;
this.cy = cy;
}
public override string ToString()
{
return base.ToString();
}
public int CompareTo(CityNode other)
{
throw new NotImplementedException();
}
}
}
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace city
{
public partial class Form1 : Form
{
IlinearList<CityNode> lst = new SLinkList<CityNode>();
IlinearList<CityNode> lst2 = new SLinkList<CityNode>();
public Form1()
{
InitializeComponent();
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
string cname = textBox1.Text;
int cx = int.Parse(textBox2.Text);
int cy = int.Parse(textBox3.Text);
CityNode cn = new CityNode(cname, cx, cy);
lst.Insert(0, cn);
show();
}
private void button2_Click(object sender, EventArgs e)
{
string cname = textBox1.Text;
int cx = int.Parse(textBox2.Text);
int cy = int.Parse(textBox3.Text);
lst.Insert(lst.Length, new CityNode(cname, cx, cy));
show();
}
private void button3_Click(object sender, EventArgs e)
{
string cname = textBox1.Text;
int cx = int.Parse(textBox2.Text);
int cy = int.Parse(textBox3.Text);
int index = (int)numericUpDown1.Value;
lst.Insert(index, new CityNode(cname, cx, cy));
show();
}
private void button4_Click(object sender, EventArgs e)
{
int index = (int)numericUpDown2.Value;
lst.Remove(index);
show();
}
private void button5_Click(object sender, EventArgs e)
{
string cname = textBox1.Text;
int cx = int.Parse(textBox2.Text);
int cy = int.Parse(textBox3.Text);
int index = (int)numericUpDown3.Value;
lst.Remove(index);
lst.Insert(index, new CityNode(cname, cx, cy));
show();
}
public void show()
{
listBox1.Items.Clear();
for (int i = 0; i < lst.Length; i++)
{
string str = lst[i].cname + " " + lst[i].cx + " " + lst[i].cy;
listBox1.Items.Add(str);
}
}
private void label4_Click(object sender, EventArgs e)
{
}
private void textBox7_TextChanged(object sender, EventArgs e)
{
}
private void button6_Click(object sender, EventArgs e)
{
string cname = textBox4.Text;
for(int i=0;i<lst.Length;i++)
{
if(lst[i].cname==cname)
{
textBox5.Text = lst[i].cy.ToString();
textBox6.Text = lst[i].cx.ToString();
}
}
}
private void button7_Click(object sender, EventArgs e)
{
int x = int.Parse(textBox7.Text);
int y = int.Parse(textBox8.Text);
int d = int.Parse(textBox9.Text);
for(int i=0;i<lst.Length;i++)
{
if(((lst[i].cy-y)* (lst[i].cy - y)+ (lst[i].cx - x)* (lst[i].cy - y)<d*d))
{
lst2.Insert(0, lst[i]);
}
}
listBox2.Items.Clear();
for (int i = 0; i < lst2.Length; i++)
{
string str = lst2[i].cname + " " + lst2[i].cx + " " + lst2[i].cy;
if (!listBox2.Items.Contains(str))
{
listBox2.Items.Add(str);
}
}
}
}
}
运行结果
1.头插
2.尾插
3.插入
4.删除
5.更新
6.查找坐标
7.查找城市
思路
结合课上所学有关单链表的知识以及C#窗体应用设计的部分知识来解决这个问题。