以下便是链表的基本结构啦~
由数据域和指向这个结点的指针构成;为了更方便的使用,我们可以将它进行重命名为SLTNode。
接下来我们便可以创建一个新的结点;
通过返回新节点的地址来使使用时更好的连接;
以下便是对SListpushBack,SListpushFront,SListNodeinsert,SListInsert 的代码~
1:插入如果如果要改变头指针,一般要用二级指针去接收;
2:插入一般要考虑空链表的情况,插入的位置也要防止传入错误,如NULL;
3:对二级指针一定不能为空并进行断言,防止在此函数中误传一个空的二级指针;
4:插入的过程中新节点连接时,千万要注意连接顺序,不能让插入位置的下一个结点与该位置的联系打断;
5; 头插时,先让新节点与原来的头节点进行联系,再使原头指针指向新的结点;
接下来便是SListPopBack,SListPopFront,SListErase,SListEraseAfter的代码~
1:尾删因为要创建两个结点,一个指针比另外一个指针为前一个位置;
(尾删,Erase,要考虑只有一个节点的情况);
2:尾删因为找的是链表的最后一个位置,删除之后找不到删除位置的前一个位置,所以要创建另外一个指针Prev记录保存地址;但是像Erase的话他有一个指针pos去保存了地址;
2:在一个特定位置前一个位置进行删除的话,直接创建一个指针tail找位置;先进行与下一个结点的连接再进行删除,提前删除的话,那么结点消除pos->Next值为随机值;
3:删除不是特定位置之后的结点的话,一般要进行找尾或者找删除位置的前一个结点;EraseAfterpop不用找;
4:Eraseafter删除指定位置的下一个位置的话,不但要考虑它下一个位置为空的情况,还要先保存下特定位置中下一个节点的地址;
因为如果是第二种方式的话,pos->next已经改变,就找不到原来要删除结点的地址了;
5:pos传过来的位置不可能为空的情况,所以防止进行pos传的位置是错误的,要进行断言;
最后便是简单的查找和输出代码了~
最后这便是c语言实现数据结构单链表的增删查改了,让我们超朝着目标方向一起努力吧~