C语言链表

链表的概念及结构
概念:链表是一种物理存储结构上非连续 、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

例如,使用链表存储 {1,2,3}
图1
图 1 链表随机存储数据
我们看到,图 1 根本无法体现出各数据之间的逻辑关系。对此,链表的解决方案是,每个数据元素在存储时都配备一个指针,用于指向自己的直接后继元素。如图 2 所示:请添加图片描述
像图 2 这样,数据元素随机存储,并通过指针表示数据之间逻辑关系的存储结构就是链式存储结构。
请添加图片描述

如图,1的位置是当前链表的起始位置,我们称之为表头,它里面放着的是第一个数据的地址,而2中数据p2,p2指向第二个数据的位置,第二个数据里面不仅有2,同时里面放着p3,p3指向下一个数据的位置,而4这里最后的指针指向的是NULL,也就是说链表就到这里结束。

遍历链表

struct Test{
        int data;
        struct Test *next;
};

用头插法创建链表

struct Test *linkHeadInsert(struct Test *phead, struct Test *new)
{
	if(phead == NULL){
		phead = new;

	}else{
		new->next = phead;
		phead = new;
	}
	return phead;
}

用尾插法创建一个链表

struct Test *linkTailInsert(struct Test *phead, struct Test *new)
{
        struct Test *p = phead;
        if(p == NULL){
                phead = new;
                return phead;
        }
        while(p->next != NULL){
                p = p->next;
        }
        p->next = new;

        return phead;
}

初始化一个链表
创建一个链表需要做如下工作:
1、声明一个头指针(如果有必要,可以声明一个头节点);
2、创建多个存储数据的节点,在创建的过程中,要随时与其前驱节点建立逻辑关系;

struct Test *creatLink(struct Test *phead)
{
	struct Test *new;
	while(1){
		new = (struct Test*)malloc(sizeof(struct Test));
		printf("Input your new data:\n");
		scanf("%d",&(new->data));
		
		if(new->data == 0){
			printf("0 quit!\n");
			return phead;
		}
		phead = linkHeadInsert(phead,new);
		
	}
}

删除链表

struct Test *deleteLink(struct Test *phead, int data)
{
        struct Test *p = phead;

        if(p->data = data){
                phead = phead ->next;
                free(p);
                return phead;
        }
}

查找链表

int searchLink(struct Test *phead,int data)
{
        while(phead != NULL){
                if(phead->data == data){
                        return 1;
                }
                phead = phead -> next;
        }
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值