#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*定义节点的结构体类型*/
struct Kid{
char name[31]; //孩子的名字
char ID; //孩子的身份
struct Kid *next;
};
typedef struct Kid Kid;
/*函数声明*/
Kid *StartGame( Kid *kidHeader, int n);
Kid *PlayOnce( Kid *pEagle, Kid *kidHeader);
void FinishGame( Kid *pEagle, Kid *kidHeader);
void ShowGame( Kid *pEagle, Kid *kidHeader);
#define N 6
/*主函数*/
int main(void){
Kid *pEagle=NULL;
Kid kidHen={"",'H'};
Kid *p;
if((pEagle=StartGame(&kidHen,N))==NULL){
printf("Failed to allocate!\n");
exit(1);
}
ShowGame(pEagle, &kidHen); //模拟一次游戏
if( (p=PlayOnce( pEagle, &kidHen)) !=NULL){
pEagle=p;
ShowGame( pEagle, &kidHen);
}
else printf("Game failed!\n");
FinishGame(pEagle, &kidHen);
}
/*各个函数的定义*/
/*函数1*/
Kid *StartGame( Kid *kidHeader, int n){
Kid *pEagle=NULL;
Kid *pChicken=kidHeader;
int i;
printf("Please enter the hen's name:");
scanf("%s",kidHeader->name);
printf("Please enter kid chicken's name in order:");
for(i=0;i<n;i++){
pChicken->next=(Kid*)malloc(sizeof(Kid)); //动态分配链表节点(小鸡)的空间
pChicken=pChicken->next;
if(pChicken==NULL)return NULL;
scanf("%s",pChicken->name);
pChicken->ID='C';
pChicken->next=NULL;
}
pEagle=(Kid*)malloc(sizeof(Kid)); //动态分配独立节点(老鹰)的空间
if (pEagle==NULL)return NULL;
printf("Please enter the eagle's name:");
scanf("%s",pEagle->name);
pEagle->ID='E';
pEagle->next=NULL;
return pEagle;
}
/*函数2*/
Kid *PlayOnce( Kid *pEagle, Kid *kidHeader ){
Kid *p, *pChicken;
char chName[31]={};
printf("Please enter the name of the chick who was caught:");
scanf("%s",chName);
p=kidHeader;
while( p->next!=NULL && strcmp(p->next->name, chName)) p=p->next;
if(p->next==NULL) return NULL; //未找到以chName为名字的小鸡
pChicken=p->next; //找到以chName为名字的小鸡,用pChicken指针来指向
p->next=pChicken->next; //从队伍中去掉被抓住的小鸡
pChicken->next=NULL;
pChicken->ID='E'; //修改小鸡身份
pEagle->ID='C'; //修改老鹰身份
while(p->next!=NULL) p=p->next;
p->next=pEagle; //新小鸡加入队伍末尾
pEagle=pChicken;
return pEagle;
}
/*函数3*/
void FinishGame( Kid *pEagle, Kid *kidHeader){
Kid *p=kidHeader->next;
while(p!=NULL){
kidHeader=p;
p=p->next;
free(kidHeader);
}
free(pEagle);
}
/*函数4*/
void ShowGame( Kid *pEagle, Kid *kidHeader){
Kid *p=kidHeader;
printf("\t%s(%c)\t",pEagle->name,pEagle->ID);
while(p!=NULL){
printf("%s(%c)-",p->name,p->ID);
p=p->next;
}
printf("||\n");
}