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;
}
}
}