链表基础应用

今天学习链表,把最基础的应用整理出来,以作纪念


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

struct shulie
{
    int shu;
    struct shulie *next;
};
int main(void)
{
    struct shulie *head = NULL;  //头指针用来判断链表的开始
    struct shulie *bl = NULL;    //bl指针用来遍历链表找到要操作的结点
    struct shulie *tmp = NULL;    //临时指针

    int i,j,k,x;

//首先构建有10个链结的链表以供使用
    for(i = 0; i < 10; i++)
    {
        bl = (struct shulie *)malloc(sizeof(struct shulie));
        if(head == NULL)
            head = bl;
        else
            tmp -> next = bl;
        bl -> next = NULL;
        bl -> shu = i;
        tmp = bl;

    }

    bl = head;
    while(bl != NULL)
    {
        printf("  %d ",bl -> shu);
        bl = bl -> next;
    }
    //在j之后插入一个数
    bl = head;
    printf("请输入要插入的位置:");
    scanf("%d",&j);
    while(bl != NULL)
    {
        if(bl -> shu == j)
        {
            tmp = (struct shulie *)malloc(sizeof(struct shulie));  //新建一个链结
            printf("请输入要插入的数字");
            scanf("%d",&k);
            tmp -> shu = k;  //将要插入的数字存放进新建链结的数据域内
            tmp -> next = bl ->next; //新建链结的指针域存放bl链结指针域内的地址,即下一个链接的地址
            bl -> next = tmp; //bl链结指针域内存放新建链结的地址
            break;
        }
        bl = bl -> next;
    }
    //打印修改后的链表
    bl = head;
    while(bl != NULL)
    {
        printf("  %d ",bl -> shu);
        bl = bl -> next;
    }

//删除有关链结
    bl = head;
    printf("请输入要删除的链结:");
    scanf("%d",&x);
    while(bl != NULL)
    {
        if(bl -> shu == x)
        {
            tmp = bl -> next; //用临时指针储存要删除的链结的地址
            bl -> next = tmp -> next;  //将要删除的链结的后一个链结的地址存储到要删除的链结的前一个链结的指针域中
                free(tmp); //释放临时指针
            break;//跳出循环遍历
        }
        bl = bl -> next;
    }
    bl = head;
    while(bl != NULL)
    {
        printf("  %d ",bl -> shu);
        bl = bl -> next;
    }
    bl = head;
    while(bl != NULL)
    {
        free(bl);
        bl = bl -> next;
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值