链表的一些基本算法(遍历 增删查改等)

1.链表的定义

typedef int SLTDataType; 
typedef struct SListNode { 
	SLTDataType _data;    
	struct SListNode* _next; 
}SListNode;

typedef struct SList { 
	SListNode* _head; 
}SList;

2.链表的遍历

//   链表遍历
for(cur = head ; cur ; cur = cur->next){

}

 for(cur = head->next ; cur != head ; cur = cur->next{             //双向

 }

3.链表的初始化

void SListInit(SList* plist) {
	plist->_head = NULL;
}

4.链表的销毁

void SListDestory(SList* plist) {
	SListNode* temp;
	while (plist->_head) {
		 temp = plist->_head;
		plist->_head = temp->_next;
		free(temp);
	}
}

5.头插

void SListPushFront(SList* plist, SLTDataType x) {                    //头插
	assert(plist);                                                   //#include <assert.h>
	SListNode* cur = (SListNode*)malloc(sizeof(SListNode));
	cur->_data = x;
	cur->_next = plist->_head;
	plist->_head = cur;
}

6.头删

void SListPopFront(SList* plist) {                                   //头删
	assert(plist);                                                 
	if (plist->_head) {
		SListNode* temp = plist->_head;
		plist->_head = temp->_next;
		free(temp);
	}
}

7.后插

void SListInsertAfter(SListNode* pos, SLTDataType x) {                //后插
	SListNode* cur = (SListNode*)malloc(sizeof(SListNode));
	cur->_data = x;
	cur->_next = pos->_next;
	pos->_next = cur;
}

8.后删

void SListEraseAfter(SListNode* pos) {                        //后删
	SListNode* temp = pos->_next;
	pos->_next = temp->_next;
	free(temp);
}

9.查(遍历一下链表)

SListNode* SListFind(SList* plist, SLTDataType x) {
	assert(plist);
	SListNode* cur;
		for (cur = plist->_head;cur;cur=cur->_next) {
			if (cur->_data == x) {
				return cur;
		}
	}
		return NULL;
}

10.查删(有头链表的情况)

void SListRemove(SList* plist, SLTDataType x) {             //必须是有头链表
	SListNode* cur;
	SListNode* temp=plist->_head;
	for (cur = plist->_head;cur;temp=cur,cur=cur->_next) {
		if (cur->_data == x){
			temp->_next = cur->_next;
		break;
		} 
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值