![]() |
#2
海底石2020-04-12 19:34
|

#include<stdio.h>
#include<stdlib.h>
//定义节点类型
typedef struct player{
int number; //数据域用来存放节点信息可以有定义多个不同类型的数据信息
char name[20];
struct player*next; //指针域必须是与结构体同类型的指针用来存放下一个节点的地址
}Player;
Player*game(int sum); //定义game函数 函数返回类型为结构体类型的指针需要一个sum参数来表示有多少个节点
void print(Player*head,Player*node); //定义输出函数
Player*Find(Player*head,int sum); //定义查找第n个节点信息
int main()
{
int sum;
printf("请输入玩家个数:");
scanf("%d",&sum); //用户输入节点个数
Player*head=NULL,*node;
head=game(sum);
node=Find(head,sum);
print(head,node);
return 0;
}
Player*game(int sum)
{
int i;
Player*head=NULL,*pt,*pre; //定义头节点,过度节点,尾节点
for(i=0;i<sum;i++){ //用循环的方式创建sum个节点
pt=(Player*)malloc(sizeof(Player)); //向系统空间为过度节点申请一个Player结构类型的空间
if(pt!=NULL){ //判断是否成功的向系统空间申请了内存
scanf("%d%s",&pt->number,pt->name); //用户输入节点的数据域(赋值)
if(head==NULL){ //head==NULL时说明链表是空链表进行头节点的处理 也可将此条语句改为if(i==0)
head=pt; //让头节点的地址指向过度节点的地址
pre=pt; //此时pt既是头节点也是尾节点
}
else { //执行else语句的说明链表已经创建好了头节点
pre->next=pt; //将尾节点与过度节点连接起来
pre=pt; //将尾节点的地址指向过度节点的地址(此时pt既是过度节点也是为节点)
}
}
else{
printf("Failed.\n");
exit(0);
}
}
pre->next=NULL; //让尾节点的指针域为空表明链表结束
return head;
}
//查找第n个节点信息
Player*Find(Player*head,int sum)
{
int n=1;
Player*node=head;
printf("请输入需要查找节点的序号:");
scanf("%d",&n);
while(n<sum&&node!=NULL){
node=node->next;
n++;
}
return node;
}
//输出节点信息
void print(Player*head,Player*node)
{
//遍历输出链表信息
while(head!=NULL){
printf("%d,%s\n",head->number,head->name);
head=head->next;
}
//输出第n个节点信息
printf("the number is %d name is %s\n",node->number,node->name);
return;
}
#include<stdlib.h>
//定义节点类型
typedef struct player{
int number; //数据域用来存放节点信息可以有定义多个不同类型的数据信息
char name[20];
struct player*next; //指针域必须是与结构体同类型的指针用来存放下一个节点的地址
}Player;
Player*game(int sum); //定义game函数 函数返回类型为结构体类型的指针需要一个sum参数来表示有多少个节点
void print(Player*head,Player*node); //定义输出函数
Player*Find(Player*head,int sum); //定义查找第n个节点信息
int main()
{
int sum;
printf("请输入玩家个数:");
scanf("%d",&sum); //用户输入节点个数
Player*head=NULL,*node;
head=game(sum);
node=Find(head,sum);
print(head,node);
return 0;
}
Player*game(int sum)
{
int i;
Player*head=NULL,*pt,*pre; //定义头节点,过度节点,尾节点
for(i=0;i<sum;i++){ //用循环的方式创建sum个节点
pt=(Player*)malloc(sizeof(Player)); //向系统空间为过度节点申请一个Player结构类型的空间
if(pt!=NULL){ //判断是否成功的向系统空间申请了内存
scanf("%d%s",&pt->number,pt->name); //用户输入节点的数据域(赋值)
if(head==NULL){ //head==NULL时说明链表是空链表进行头节点的处理 也可将此条语句改为if(i==0)
head=pt; //让头节点的地址指向过度节点的地址
pre=pt; //此时pt既是头节点也是尾节点
}
else { //执行else语句的说明链表已经创建好了头节点
pre->next=pt; //将尾节点与过度节点连接起来
pre=pt; //将尾节点的地址指向过度节点的地址(此时pt既是过度节点也是为节点)
}
}
else{
printf("Failed.\n");
exit(0);
}
}
pre->next=NULL; //让尾节点的指针域为空表明链表结束
return head;
}
//查找第n个节点信息
Player*Find(Player*head,int sum)
{
int n=1;
Player*node=head;
printf("请输入需要查找节点的序号:");
scanf("%d",&n);
while(n<sum&&node!=NULL){
node=node->next;
n++;
}
return node;
}
//输出节点信息
void print(Player*head,Player*node)
{
//遍历输出链表信息
while(head!=NULL){
printf("%d,%s\n",head->number,head->name);
head=head->next;
}
//输出第n个节点信息
printf("the number is %d name is %s\n",node->number,node->name);
return;
}
只有本站会员才能查看附件,请 登录
问题一:我查找的是第四个节点的信息为什呢输出的第二个节点的信息呢?
问题二://输出第n个节点信息
printf("this player number is %d name is %s\n",node->number,node->name); 我想把这句代码改为printf("the first %d player number is %d name is %s",n,node->number,node->name);但是n在 Player*Find(Player*head,int sum);函数里怎么样把它返回到void print(Player*head,Player*node)函数里面呢