线性链表

#include <stdio.h>
#include <stdlib.h>

struct Grade_Info
{
    int score;
    struct Grade_Info *next;
};

typedef struct Grade_Info NODE;

NODE *Create_LinkList();
void Insert_LinkList (NODE *head,NODE *pnew,int i);
void Delete_LinkList (NODE *head,int i);
void Display_LinkList(NODE *head);
void Free_LinkList (NODE *head);

void main()
{
    NODE *head,*pnew;
    head=Create_LinkList();
    if(head==NULL)
        return;
    printf("after create:");
    Display_LinkList(head);

    pnew=(NODE*)malloc(sizeof(NODE));
    if(pnew==NULL)
    {
        printf("no enough memory!\n");
        return ;
    }
    pnew->score=88;
    Insert_LinkList(head,pnew,3);
    printf("after insert:");
    Display_LinkList(head);

    Delete_LinkList(head,3);
    printf("after delete:");
    Display_LinkList(head);

    Free_LinkList(head);
}

NODE *Create_LinkList()
{
    NODE *head,*tail,*pnew;
    int score;

    head=(NODE*)malloc(sizeof(NODE));
    if(head==NULL)
    {
        printf("no enough memory!\n");
        return (NULL);
    }
    head->next=NULL;
    tail=head;

    printf("input the score of students:\n");
    while(1)
    {
        scanf("%d",&score);
        if(score<0)
            break;
        pnew=(NODE*)malloc(sizeof(NODE));
        if(pnew==NULL)
        {
            printf("no enough memory!\n");
            return (NULL);
        }
        pnew->score=score;
        pnew->next=NULL;

        tail->next=pnew;
        tail=pnew;
    }
    return (head);
}

void Insert_LinkList(NODE*head,NODE*pnew,int i)
{
    NODE *p;
    int j;

    p=head;
    for(j=0;j<i&&p!=NULL;j++)
        p=p->next;
    if(p==NULL)
    {
        printf("the %d node not found!\n",i);
        return ;
    }

    pnew->next=p->next;
    p->next=pnew;
}

void Delete_LinkList(NODE *head,int i)
{
    NODE *p,*q;
    int j;

    if(i==0)
        return ;

    p=head;
    for(j=1;j<i&&p->next!=NULL;j++)
        p=p->next;
    if(p->next==NULL)
    {
        printf("the %d node not found!\n",i);
        return ;
    }

    q=p->next;
    p->next=q->next;
    free(q);
}

void Display_LinkList(NODE *head)
{
    NODE *p;

    for(p=head->next;p!=NULL;p=p->next)
        printf("%d  ",p->score);
    printf("\n");
}

void Free_LinkList(NODE *head)
{
    NODE *p,*q;

    p=head;
    while(p->next!=NULL)
    {
        q=p->next;
        p->next=q->next;
        free(q);
    }
    free(head);
}

 

转载于:https://www.cnblogs.com/919czzl/p/4431133.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值