下面这个是基于spoc上老师讲的那个整合而来,放在CB里怕哪天没了,也希望今天晚上不会用到
#include <stdio.h>
#include <stdlib.h>
typedef struct player
{
char name[10];
int hp;
int IQ;
struct player *next;
} PLAYER;
PLAYER *creat();//链表创建
PLAYER *find(PLAYER *head,int n);//链表查找
PLAYER *insert(PLAYER * head);//链表插入
PLAYER *Delete(PLAYER * head,int);//链表删除
void outlook(PLAYER *head);
int main()
{
PLAYER *head;
head = creat();
head = insert(head);
// head = Delete(head,n);
outlook(head);
}
PLAYER *creat()
{
int num;
printf("Input the number of members you wanna your Linked list have:");
scanf("%d",&num);
PLAYER *pt,*pre,*head;
pt = (PLAYER *)malloc(sizeof(PLAYER));
if(pt)
{
scanf("%s %d %d",pt -> name,& pt -> hp,& pt -> IQ);
head = pt;
pre = pt;
}
else
{
printf("创建失败!\n");
exit(0);
}
for(int i = 1; i < num; i++)
{
pt = (PLAYER *)malloc(sizeof(PLAYER));
if(pt)
{
scanf("%s %d %d",pt -> name,& pt -> hp,& pt -> IQ);
pre -> next = pt;
pre = pt;
}
else
{
printf("创建失败!");
exit(0);
}
}
pt -> next = NULL;
return head;
}
PLAYER *find(PLAYER *head,int n)
{
PLAYER *pr;
pr = head;
int i = 1;
while(pr != NULL && i < n)
{
pr = pr -> next;
i++;
}
return pr;
}
PLAYER *insert(PLAYER *head)
{
PLAYER *pt,*pre;
int i,j;
printf("Input the ones you wanna insert between:");
scanf("%d %d",&i,&j);
pt = (PLAYER *)malloc(sizeof(PLAYER));
if(pt)
{
printf("Input the insert one!");
scanf("%s %d %d",pt -> name,& pt -> hp,& pt -> IQ);
}
pre = find(head,i);
if(pre)
{
pt->next = pre ->next;
pre ->next = pt;
}
else
printf("插入失败,未找到指定位置!");
return head;
}
void outlook(PLAYER *head)
{
printf("%s %d %d\n",head->name,head->hp,head->IQ);
printf("%s %d %d\n",head->next->name,head->next->hp,head->next->IQ);
printf("%s %d %d\n",head->next->next->name,head->next->next->hp,head->next->next->IQ);
}
PLAYER *Delete(PLAYER * head,int index)
{
PLAYER *pt,*pre;
pre = find(head,index-1);
pt = pre->next;
if(pt!=NULL)
{
pre = pt->next;
free(pt);
}
else
printf("No such node!");
return head;
}