链表的建、插、删、查

下面这个是基于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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值