链表

邮差的信 提交于 2019-12-26 15:44:46

#include <stdio.h>
#include <stdlib.h>
typedef struct student
{
    int num;
    float score;
    struct student *next;
}q;
q *creat(int n)///指针类型
{
    int i;
    q *head,*node,*end;
    head=(q*)malloc(sizeof(q));///给head分配空间
    end=head;              ///头指针=尾指针
    for(i=0;i<n;i++)
    {
        node=(q*)malloc(sizeof(q));///给node分配空间
        scanf("%d %f",&node->num,&node->score);
        end->next=node;///连接
        end=node;///尾部指针指向这个节点
    }
    end->next=NULL;
    return head;///返回头指针地址
}
void change(q *list,int n,char a)///第n个节点的a值
{
    q *t=list;
    int i=0;
    while(i<n&&t!=NULL)
    {
        t=t->next;
        i++;
    }///i=n时停止循环,此时t指向的是第n个节点
    if(t!=NULL&&a=='n')
    {
        puts("要修改的值:");
        scanf("%d",&t->num);
    }
    else if(t!=NULL&&a=='s')
    {
        puts("要修改的值:");
        scanf("%f",&t->score);
    }
    else puts("节点不存在\n");
}
void delet(q *list,int n)
{
    q *t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    {
        in=t;
        t=t->next;///t=n,in是n的上一个指针
        i++;
    }
    if(t!=NULL)
    {
        in->next=t->next;///将in与n的下一个节点相连(跳过n)
        free(t);///释放n节点的空间
    }
    else puts("节点不存在\n");
}
void insert(q *list,int n)///第n个节点之后插入
{
    q *t=list,*in;
    int i=0;
    while(i<n&&t!=NULL)
    {
        t=t->next;
        i++;
    }
    if(t!=NULL)
    {
        in=(q*)malloc(sizeof(q));
        puts("要插入的值:");
        scanf("%d",&in->num);
        scanf("%f",&in->score);
        in->next=t->next;///将in与n的下一个节点相连(跳过n)
        t->next=in;
    }
    else puts("节点不存在\n");
}
int main()
{

    q *p,*head;
    p=creat(3);
    head=p;

    while(p->next !=NULL)///注意头指针没有任何数值
    {
         p=p->next;
         printf("%d %5.1f\n",p->num,p->score);
    }
    putchar(10);

    p=head;
    change(p,1,'s');
    while(p->next !=NULL)///注意头指针没有任何数值
    {
         p=p->next;
         printf("%d %5.1f\n",p->num,p->score);
    }
    putchar(10);

    p=head;
    delet(p,1);
    while(p->next !=NULL)///注意头指针没有任何数值
    {
         p=p->next;
         printf("%d %5.1f\n",p->num,p->score);
    }
    putchar(10);

    p=head;
    insert(p,2);
    while(p->next !=NULL)///注意头指针没有任何数值
    {
         p=p->next;
         printf("%d %5.1f\n",p->num,p->score);
    }
    putchar(10);
    return 0;
}

在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!