C语言单链表操作模板,初始化增删改查等操作

C语言单链表操作模板,初始化增删改查等操作

对于这次博客,博主倒是没什么好讲解的,因为单链表本质上设计的问题难点在于对指针的应用和理解。理解很重要,如果真的理解了指针,其实单链表很简单。
后续,博主准备专门写一篇关于指针的博客,来深入谈解一下操作指针的本质,
下面是单链表一些代码,可供初学者学习,是个不错的模板,当然,代码早已调通:

#include<stdio.h>
#include<stdlib.h>
#define  true 1; 
#define   false 0;

typedef int Element;
typedef struct sqlist {
	Element data;
	struct sqlist* next;
}sqlist,*psqlist;

void InitSqlist(psqlist* L) {

	(*L) = (sqlist*)malloc(sizeof(sqlist));
	(*L)->next = NULL;
}

void headsqlist(sqlist *L,Element e){
	sqlist *r;
	r = (sqlist*)malloc(sizeof(sqlist));
	r -> data = e;
	r->next = L->next;
	L->next = r;

}

void tailsqlist(sqlist* L,Element e) {
	sqlist *p = L,*s;
	while (p->next) {
		p = p->next;
	}
	s = (sqlist*)malloc(sizeof(sqlist));
	s->data = e;
	s->next = p->next;
	p->next = s;

}
void printsqlist(sqlist* L) {
	sqlist* p = L->next;

	while (p) {
		printf("%d \n", p->data);
		p = p->next;
	}
}

sqlist* positionsqlist(sqlist *L, int i) {
	sqlist *p = L->next;
	int j = 0;
	if (i <= 0) return NULL;
	while (p) {
		j++;
		if (i == j)return p;
		else  p = p->next;
		
		
	}
	return NULL;
	


}

sqlist * valuesqlist(sqlist* L, Element e) {
	sqlist* p = L->next;
	
	while (p) {
		if (p->data == e)return p;
		p = p->next;
	}
	return NULL;
}
int length(sqlist* L) {
	sqlist *p = L;
	int length=0;
	while (p->next) { p = p->next; length++; }
	return length;
	
}


int   positiondelete(sqlist* L, int i) {
	sqlist* p = L, *s;
	int j = 0;
	if (i <= 0) return NULL;
	while (j < i-1 && p->next) {
		p = p->next;
		j++;
	}
	if (j == i-1) { 
		s = p->next;
		p->next = s->next;
		free(s);
		return true;
	}
	else { return false; }
}

int   positioninsert(sqlist* L, int i,Element e) {
	sqlist* p = L, * s;
	int j = 0;
	if (i <= 0) return NULL;
	while (j < i - 1 && p->next) {
		p = p->next;
		j++;
	}
	if (j == i - 1) {
		s = (sqlist*)malloc(sizeof(sqlist));
		s->data = e;
		s->next = p->next;
		p->next = s;
	}
	else { return false; }
}

int   valuedelete(sqlist* L, Element e) {
	sqlist* p = L->next, * s;
	
	while (p) {
		if (p->data == e) {
			s = p->next;
			p->next = s->next;
			free(s);
			return true;
		}

		p = p->next;
		
	}
	
	 return false; 
}

void main() {
	sqlist* L;
	sqlist* p;
	int i;
	int l;
	InitSqlist(&L);
	headsqlist(L, 6);
	tailsqlist(L, 5);
	for (i = 0; i <= 10; i++) {
		tailsqlist(L, i);
	}
	printsqlist(L);
	p = positionsqlist(L, 5);
	printf(" zz :%d \n", p->data);
	p = valuesqlist(L, 7);
	printf("%d \n", p->data);
	l = length(L);
	printf("legtnh is %d ", l);
	l=positiondelete(L, 5);
	l = length(L);
	printf("now, legtnh is %d ", l);
	printf("\n print this  sqlist:\n");
	printsqlist(L);


	l =valuedelete(L, 5);
	l = length(L);
	printf("now,value delete legtnh is %d ", l);
	printf("\n print this  sqlist:\n");
	printsqlist(L);

	l = positioninsert(L, 5,66);
	l = length(L);
	printf("now,position insert legtnh is %d ", l);
	printf("\n print this  sqlist:\n");
	printsqlist(L);




	printf("\nhello");
	system("pause");
}
C语言单链表是一种常用的数据结构,可以用来存储和操作数据。下面我来详细介绍一下单链表初始化、创建、增删操作。 1. 初始化链表:首先,我们需要定义一个链表节点的结构体,包含一个数据域和一个指向下一个节点的指针。然后,通过给指针赋初值NULL,使链表为空。 2. 创建链表:创建链表需要先定义一个头指针,初始化为空。然后,通过不断申请新的节点并将数据存入节点的数据域,再将新节点连接在链表的尾部。直到输入结束标志,即可创建完整的单链表。 3. 链表的插入操作:可以在链表的任意位置插入一个新节点。需要先让新节点的指针指向被插入位置的下一个节点,然后让被插入位置的节点指针指向新节点。 4. 链表的删除操作:可以删除链表中的任意节点。需要先找到待删除节点的前一个节点,然后将前一个节点的指针指向待删除节点的下一个节点,最后释放待删除节点的内存空间。 总结:单链表初始化是通过给指针赋初值NULL来表示链表为空。链表的创建是通过不断申请新节点并将新节点连接在链表尾部来创建完整的链表链表的插入操作是将新节点插入到链表的任意位置。链表的删除操作是通过重新连接节点的指针,并释放待删除节点的内存空间来删除节点。 以上是对C语言单链表初始化、创建、增删操作的简要介绍,希望对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值