【无标题】

链表的基本操作

// slist.h
typedef int SLTDateType;
typedef struct SListNode
{
	SLTDateType data;
	struct SListNode* next;
}SListNode;
 
// 动态申请一个节点
SListNode* BuySListNode(SLTDateType x);
// 单链表打印
void SListPrint(SListNode* plist);
// 单链表尾插
void SListPushBack(SListNode** pplist, SLTDateType x);
// 单链表的头插
void SListPushFront(SListNode** pplist, SLTDateType x);
// 单链表的尾删
void SListPopBack(SListNode** pplist);
// 单链表头删
void SListPopFront(SListNode** pplist);
// 单链表查找
SListNode* SListFind(SListNode* plist, SLTDateType x);
// 单链表在pos位置之后插入x
// 分析思考为什么不在pos位置之前插入?
void SListInsertAfter(SListNode* pos, SLTDateType x);
// 单链表删除pos位置之后的值
// 分析思考为什么不删除pos位置?
void SListEraseAfter(SListNode* pos);
// 单链表的销毁
void SListDestroy(SList* plist);

以上基本操作有许多注意事项
1.头删,头插,尾删,尾插,等操作都使用了二级指针,其原因是该链表没有虚拟头节点,所以在进行上述操作时,很有可能改变头节点的指针,所以要使用二级指针修改链表头,在带头节点的链表中,节点由头节点链接起来,所以不需要二级指针。
2.多用断言,同时对特殊情况进行特殊处理,增加代码的健壮性。

你可能感兴趣的:(c语言,数据结构,链表)