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");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值