链表练习

链表练习 城市信息处理

在这里插入图片描述

#include <iostream>
#include <math.h>
#include <conio.h>
#include <string>
using namespace std;
struct Node
{
 char Name[50];
 double x, y;
 Node*next;
};
class List
{
private:
 Node*head, *f;
 int size;
public:
 List();
 void Insert();
 void Delete();
 void Search();
 void distance();
 void show();
 void update();
};
List::List()
{
 head = new Node;
 f = head;
 size = 0;
}
void List::Insert()
{
 Node*p = new Node;
 cout << "请输入你想添加的城市";
 cin >> p->Name;
 cin >> p->x;
 cin >> p->y;
 if (size == 0)
 {
  cout << "地图上暂无任何城市\n";
  f->next = p;
  f = p;
  p->next = NULL;
  ++size;
  return;
 }
 else
 {
  f->next = p;
  ++size;
  f = p;
  p->next = NULL;
 }
}
void List::Delete()
{
 Node*p;
 Node*t;
 char name[50];
 cout << "请输入你想删除的城市";
 cin >> name;
 for (p = head; p->next != NULL; p = p->next)
 {
  if (strcmp(p->next->Name, name))
  {
   t = p->next;
   delete(t);
   --size;
   break;
  }
 }
}
void List::Search()
{
 char name[20];
 Node*p;
 cout << "请输入你想查询的城市";
 cin >> name;
 for (p = head; p->next != NULL; p = p->next)
 {
  if (strcmp(p->next->Name, name))
  {
   cout << p->Name;
   cout << '(' << p->x << ',' << p->y << ')' << endl;
   break;
  }
 }
}
void List::update()
{
 char name[20];
 Node*p;
 cout << "请输入你想查询的城市";
 cin >> name;
 for (p = head; p->next != NULL; p = p->next)
 {
  if (strcmp(p->next->Name, name))
  {
   cout << "请输入新的城市名";
   cin >> p->Name;
   cout << "请输入新的坐标";
   cin >> p->x >> p->y;
   break;
  }
 }
}
void List::distance()
{
 char name[20];
 Node*p;
 Node n;
 int i=0;
 double d, de;
 cout << "您目前所在的城市是";
 cin >> name;
 cout << "最大距离为";
 cin >> d;
 for (p = head; p->next != NULL; p = p->next)
 {
  if (strcmp(p->next->Name, name))
  {
   break;
  }
 }
 n = *p;
 p = head->next;
 for (; i < size; i++, p = p->next)
 {
  de = sqrt(((*p).x - n.x) * ((*p).x - n.x) + ((*p).y - n.y) * ((*p).y - n.y));
  if (de <= d&&strcmp(p->Name, name))
  {
   cout << p->Name;
   cout << '(' << p->x << ',' << p->y << ')'<<endl;
  }
 }
}
void List::show()
{
 Node*p;
 p = head->next;
 int i=0;
 for (; i < size; i++)
 {
  cout << p->Name;
  cout << '(' << p->x << ',' << p->y << ')' << endl;
  p = p->next;
 }
}
void main()
{
 List t;
 int k;
 cout << "\n\n 1.增加城市";
 cout << "\n\n 2.删除城市";
 cout << "\n\n 3.修改城市信息";
 cout << "\n\n 4.查询城市坐标";
 cout << "\n\n 5.给定坐标,查询距离D以内的城市";
 do
 {
  cout<<endl<<endl;
  cout << "\n 请输入你的操作指令:\n";
  cin >> k;
  if (k > 0 && k < 6)
   {
   switch (k)
   {
   case 1:
   {
     t.Insert();
     t.show();
   }break;
   case 2:
   {
     t.Delete();
     t.show();
   }break;
   case 3:
   {
     t.update();
     t.show();
   }break;
   case 4:
   {
     t.Search();
   }break;
   case 5:
   {
     t.distance();
   }break;
   default:cout << "输入错误"; break;
   }
  }
 }while (k > 0 && k < 6);
 system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值