城市链表c语言(C语言链表的使用方法)

本文目录
- C语言链表的使用方法
- C语言链表中q->next=p;表示什么意思
- 将若干城市的信息,存入一个带头结点的单链表结点中的城市信息包括:城市名,城市的位置坐标(c++实现)
- 将若干城市的信息存入一个带头结点的单链表,结点中的城市信息包括城市名,城市的位置坐标,要求:
- 将若干城市的信息存入一个带头节点的单链表,节点种的城市信息包括城市名城市的
C语言链表的使用方法
下面的程序是单链表的建立与输出,都有详细的注释,相信你能看的懂
但要想学习链表必须得掌握了一定的C语言基础
下面这个链表的作用是建立5个结点的单链表,5个结点的值输入以后,依次输出各个结点的值
#include《stdio.h》
#include《stdlib.h》
//链表的建立与输出
struct node//定义结点的类型
{
int num,score;
node*link;
};
void main()
{
node*creat(int n);//函数原型声明
void print(node*h);//函数原型声明
node*head=0;//定义链头指针并初始化
head=creat(5);//调用creat函数创建链表
print(head);//调用print函数输出链表
}
node*creat(int n)
{
node*h=0,*p,*q;
int i;
for(i=1;i《=n;i++)
{
q=(node*)malloc(sizeof(node));//分配一个结点空间
scanf("%d%d",&q-》num,&q-》score);//输入新结点的值
q-》link=0;//新结点的指针域置0
if(h==0)
h=q;//第一个结点作为链头结点
else
p-》link=q;//新结点添加到链表的末尾
p=q;
}
return h;//返回链头指针
}
void print(node*h)//链表输出函数的定义
{
while(h)//当指针h非空时输出h所指结点的值
{
printf("num=%d\tscore=%d\n",h-》num,h-》score);
h=h-》link;//使h指向下一个结点
}
}
C语言链表中q->next=p;表示什么意思
q-》next = p; 表示将节点p加入到节点q之后。
意思:使当前指针指向链表的下一个结点。
一般作用在数据结构中的单链表里由应用,语句中的p一般指向一个结构体类型的数据,此类型的数据通常表示节点;结构体里存放的一些数据和记录下一个节点地址的指针变量next;这个next就好比链条一样,连接着一个个节点。
->是一个整体,它是用于指向结构体、C++中的class等含有子数据的指针用来取子数据。换种说法,如果在C语言中定义了一个结构体,然后申明一个指针指向这个结构体,那么要用指针取出结构体中的数据,就要用到“->”.
扩展资料
链表的特点:
1、n个节点离散分配
2、每一个节点之间通过指针相连
3、每一个节点有一个前驱节点和一个后继节点
4、首节点没有前驱节点,尾节点没有后继节点
创建链表前须知
首节点:存放第一个有效数据的节点。
头节点:在单链表的第一个结点之前附设一个结点,它没有直接前驱,称之为头结点,头结点的数据域可以不存储任何信息,指针域指向第一个节点(首节点)的地址。头结点的作用是使所有链表(包括空表)的头指针非空。
头指针:指向头节点的指针。
尾节点:存放最后一个有效数据的节点。
尾指针:指向尾节点的指针。
百度百科——链表
将若干城市的信息,存入一个带头结点的单链表结点中的城市信息包括:城市名,城市的位置坐标(c++实现)
#include 《iostream》
#include 《math.h》
#include《conio.h》
#include《string》
using namespace std;
struct Node
{
char Name;
double x,y;
Node *next;
};
class List
{
private:
Node *head,*f;
int size;
public:
List();
void Insert();
void Delete();
void Search();
void update();
void init();
void cha();
void show();
};
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 ;
int i;
if(size==0)
{
cout《《"城市地图上没有任何城市信息!";
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;
cout《《"请给出你要删除的城市的名称:";
cin》》name ;
for(p = head; p-》next != NULL; p = p-》next)
if(!strcmp(p-》next-》Name,name))
{
t = p-》next;
p-》next = t-》next;
delete(t);
size--;
break;
}
}
void List::Search ()
{
char name;
Node *p;
cout《《"请给出你想查询的城市的名称:";
cin》》name;
for(p = head-》next; p != NULL; p = p-》next)
if(!strcmp(p-》Name,name))
{
cout《《p-》Name ;
cout《《’(’《《p-》x《《’,’《《p-》y《《’)’《《endl ;
break;
}
}
void List::update()
{
char name;
Node *p;
cout《《"请给出你想查询的城市的名称:";
cin》》name;
for(p = head-》next; p != NULL; p = p-》next)
if(!strcmp(p-》Name,name))
{
cout《《"请输入新的城市名称:";
cin》》p-》Name;
cout《《"请输入城市的坐标x,y:";
cin》》p-》x 》》p-》y ;
break;
}
}
void List::cha()
{
char name;
Node *p;
Node n;
int i;
double d;
double de ;
cout《《"你给的城市是 :";
cin》》name ;
cout《《"你给的距离是 :";
cin》》d;
for(p = head-》next; p != NULL; p = p-》next)
if(!strcmp(p-》Name,name))
break;
n = *p;
p = head-》next;
for(i=0;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;
for(i=0;i《size;i++)
{
cout《《p-》Name ;
cout《《’(’《《p-》x《《’,’《《p-》y《《’)’《《endl ;
p = p-》next;
}
}
void main()
{
List t;
int k;
do{
cout《《"\n\n 1.增加城市";
cout《《"\n\n 2.删除城市";
cout《《"\n\n 3.修改城市信息";
cout《《"\n\n 4.根据城市名查询其坐标";
cout《《"\n\n 5.给坐标P和距离D,查询所有与P的距离小于等于D的城市";
cout《《"\n***************************************************************"《《endl;
cout《《"\n 请输入你的选择操作(1、2、3、4、5) :\n";
cin》》k;
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.cha ();}break;
default:break;
}
}while(k》0&&k《6);
cout《《" 按任意键返回......";
_getch();
return;
}
说句实话,你的程序要是能运行你才奇怪,从头错到尾。
我建议你去闭关重新学一下循环结构,判断结构,链表,指针以及结构体的知识,从你的程序我可以看出你是一点都没有掌握这些知识
现在程序我帮你改好了
将若干城市的信息存入一个带头结点的单链表,结点中的城市信息包括城市名,城市的位置坐标,要求:
#include《stdio.h》
#include《malloc.h》
typedef struct Node{
char data1;
int data2,data3;
struct Node *next;
}Node,*LinkList L;
void Initlinklist(LinkList *l)/*对单链表进行初始化*/{
*l=(LinkList)malloc(sizeof(Node));
(*l)-》next=NULL;
}
void CreateFromTail(LinkList L)
{
Node *r, *city;
char *b;
int flag=1,c,d;/*设置一个标志,初值为1,当输入"$"时,flag为0,建表结束*/
r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/
while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/
{
printf("input the City:\n");
b=gets();//获取城市名
printf("input the
site:\n");
scanf("%d%d",&c,&d);//获取城市坐标
if(!strcmp(b,"$"))//跳出条件
{
city=(Node*)malloc(sizeof(Node));
city-》data1=*b;
city-》data2=c;
city-》data3=d;
r-》next=city;
r=city;
}
else
{
flag=0;
r-》next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/
}
}//while
}
int search()//查找城市坐标 {
LinkList L;
Node *p,*q;
int flag=0;
int i;
char
c;
Initlinklist(&L);
printf("input
the element,end by ’$’\n");
CreateFromTail(L);//尾插建立单链表
p =L-》next;
printf("Which city are you
want to search:\n");
q=gets();//获取城市名
while(p!=NULL)
{
if(strcmp(p-》data1,q)){//比较输入的城市名是否存在
printf("%s’s site
is:(%d,%d)",p-》data1,p-》data2,p-》data3);//输出名字于坐标
p=NULL;//跳出循环
break;
}
p=p-》next;//下一位
}//while
}
int count()//计算符合要求的城市 {
LinkList L;
Node *p,*q;
int flag=0;
int i,e,f,g,h;
char c;
Initlinklist(&L);
printf("input the element,end by ’$’\n");
CreateFromTail(L);//尾插建立单链表
p
=L-》next;
printf("Input the site:\n");
scanf("%d%d",&e,&f);//获取坐标
printf("Input the distance:\n");
scanf("%d",&g);//获取距离
while(p!=NULL)
{
f=e+f+g;//条件2的满足条件
g=p-》data2+p-》data3;
if(g《=f){
printf("%s’s site
is:(%d,%d)\n",p-》data1,p-》data2,p-》data3);
h++;//计算符合要求的城市个数
}
p=p-》next;
}//whileprintf("There are %d cities to
meet the requirements\n",h);
}
将若干城市的信息存入一个带头节点的单链表,节点种的城市信息包括城市名城市的
#include《iostream.h》
#include《alloc.h》
main(){
int i;
/*定义名为city的递归结构*/
strut city{
char name;
student *next;/*next是指向自身的结构体指针*/
}
/*用city声明三个结构体指针变量*/
struct city *head,*tail,*temp;
/*申请第一块数据,并设置各结构指针初值*/
temp==new struct city;//申请内存
head=temp;//头指针
tail=head;//尾指针
//循环为链表输入数据
cout《《"\t name"《《endl;
for(i=1;;i++){
cout《《i《《"\t";
cin》》temp-》name;
if(temp-》name!=’*’)
{
temp-》next=null;
tail=temp;//设置尾指针
}
else{
delete temp;
tail-》next=NULL;
break;
}
temp-》next=new struct city;
temp=temp-》next;
}
}

更多文章:
什么时候用inner join(SQL中,用select语句时,为什么有时候要用inner join,有时候不用啊希望好心人帮忙)
2026年7月15日 12:30
javascript窗口对象是什么(demo是不是javascript的window对象的方法)
2025年9月15日 11:30
dedecmsv6怎样安装模板(dedecms 导入新的模板,模板的css,js等,怎么设置路径)
2025年11月5日 00:30
distinction学位在国内(M.A.with distinction是什么学位)
2025年7月12日 04:15
time clock power loss(电脑显示clockpowerloss还有optionsnot)
2026年1月10日 12:00
在 C语言中字符串的替换如何实现的!?js 字符串 replace 只能替换一个
2025年6月3日 05:30
sleep函数作用(linux 的sleep()、usleep()、nanosleep()函数)
2025年10月3日 01:00
















