数据结构学习笔记(二)--------单链表的操作

一、简介

             关于数据结构学习的相关代码,是本人在学习过程中,完全根据自己的理解所写的一些基本操作,可能会产生一些错误,但本人写博客的原因只为记录一下个人的学习记录,如有读者看到本人博客有错误的地方,请指正。

二、具体实现

#include<stdio.h>
#include<malloc.h>
//单链表的节点结构
struct Node
{
	int date;//数据域
	Node *next;//指针域,指向下一下结点的地址
};
//单链表的链表结构
struct NodeLink
{
	Node *head;//头指针
	int length;//当前链表长度
};
//构建链表的两种方法
//1.头插法
bool buildNode1(NodeLink *nodeLink){
	//注,在使用头插法建立链表的时候,一定要重新为头节点分配空间
	nodeLink->head = (Node*)malloc(sizeof(Node));
	nodeLink->head->next = NULL;
	for (int i = 0; i < 10;i++){
		Node *s = (Node*)malloc(sizeof(Node));
		s->date = 1;
		s->next = nodeLink->head->next;
		nodeLink->head->next = s;
		nodeLink->length++;
	}
	
	return true;
}
//单链表尾插法建立链表
bool buildNode2(NodeLink *list){
	Node *newNode;//要插入的节点;
	Node *last;//始终指向尾部节点
	list->head = (Node*)malloc(sizeof(Node));
	last = list->head;
	for (int i = 0; i < 10;i++){
		newNode = (Node*)malloc(sizeof(Node));
		newNode->date = i;
		last->next = newNode;
		last = newNode;
		list->length++;
	}
	last->next = NULL;
	return true;
}
//单遍历链表
void showLink(NodeLink *list){
	Node *s = list->head;
	while (s->next!=NULL){
		s = s->next;
		printf("%d", s->date);
	}
	printf("当前链表长度为:%d", list->length);
}
//单链表元素插入
bool insertEle(NodeLink *L,int index,int data){

	if (index < 0||index>L->length)
		return false;
	Node *newNode = (Node*)malloc(sizeof(Node));
	Node *p = L->head;//辅助指针
	newNode->date = data;
	newNode->next = NULL;
	//因为有了头节点,节点插入就不需要考虑插入的位置
	/*if (index == 0){
		newNode->next = p->next;
		p->next = newNode;
		L->head = p;
		L->length++;
		return true;
	}*/
	for (int i = 0; i < index-1;i++){
		p = p->next;
	}
	newNode->next = p->next;
	p->next = newNode;
	L->length++;
	return true;
}
//单链表元素的删除
bool deleEle(NodeLink *L,int index){
	Node *p = L->head;
	if (L->length == 0)
		return false;
	if (index < 0 || index>L->length - 1)
		return false;
	for (int i = 0; i < index - 1;i++){
		p = p->next;
	}
	Node *deNode = p->next;
	p->next = deNode->next;
	L->length--;
	free(deNode);
	return true;
}
void main(){
	NodeLink linkSqu = {0};
	NodeLink linkSqu1 = { 0 };
	if (buildNode1(&linkSqu)){
		//showLink(&linkSqu);
		if (insertEle(&linkSqu,0,3)){
			printf("  ");
			showLink(&linkSqu);
			printf("  ");
		}
		else{
			printf("插入失败");
		}
		if (deleEle(&linkSqu,0)){
			printf("  ");
			showLink(&linkSqu);
			printf("  ");
		}
		else{
			printf("删除失败");
		}
	}
	else{
		printf("建立链表失败");
	}
	if (buildNode2(&linkSqu1)){
		//showLink(&linkSqu1);
	}
	else{
		printf("建立链表失败");
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小生不财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值