http://blog.csdn.net/hanjing_1995/article/details/51539563
[cpp]?view plain
?copy #define?_CRT_SECURE_NO_WARNINGS?1?? #include<iostream>?? using?namespace?std;?? ?? ?? ?? #include<assert.h>?? ?? ?? typedef?int?DataType;?? ?? typedef?struct?SListNode?? {?? ????DataType?_data;?? ????struct?SListNode*?_next;?? }SListNode;?? ?? ?? SListNode*?_CreateNode(DataType?x)?? {?? ????SListNode*?head?=?(SListNode*)malloc(sizeof(SListNode));?? ????head->_data?=?x;?? ????head->_next?=?NULL;?? ????return?head;?? }?? ?? ?? void?PushBack(SListNode*&?head,?DataType?x)?? {?? ????if?(head?==?NULL)?? ????{?? ????????head?=?_CreateNode(x);?? ????????head->_next?=?NULL;?? ????}?? ????else?? ????{?? ????????SListNode*?cur?=?head;?? ????????while?(cur->_next?!=?NULL)?? ????????{?? ????????????cur?=?cur->_next;?? ????????}?? ????????cur->_next?=?_CreateNode(x);?? ????}?? ?????? }?? ?? ?? void?PopBack(SListNode*&?head)?? {?? ????if?(head?==?NULL)?? ????{?? ????????return;?? ????}??? ????else?if?(head->_next?==?NULL)?? ????{?? ????????free(head);?? ????????head?=?NULL;?? ????}?? ????else?? ????{?? ????????SListNode*?cur?=?head;?? ????????SListNode*?next?=?head;?? ?? ????????while?(cur)?? ????????{?? ????????????next?=?cur->_next;?? ????????????if?(next?!=?NULL?&&?next->_next?==?NULL)?? ????????????{?? ????????????????free(next);?? ????????????????cur->_next?=?NULL;?? ????????????????return;?? ????????????}?? ?? ????????????cur?=?cur->_next;?? ????????}?? ????}?? ?????? }?? ?? ?? void?PushFront(SListNode*&?head,DataType?x)?? {?? ????if?(head?==?NULL)?? ????{?? ????????head?=?_CreateNode(x);?? ????}?? ????else?? ????{?? ????????SListNode*?pcur?=?_CreateNode(x);?? ????????pcur->_next?=?head;?? ????????head?=?pcur;?? ????}?? }?? ?? ?? void?PopFront(SListNode*&?head)?? {?? ????if?(head?==?NULL)?? ????{?? ????????return;?? ????}?? ????else?if?(head->_next?==?NULL)?? ????{?? ????????free(head);?? ????????head?=?NULL;?? ????}?? ????else?? ????{?? ????????SListNode*?del?=?head;?? ????????SListNode*?next?=?head->_next;?? ????????free(del);?? ????????del?=?NULL;?? ????????head?=?next;?? ????}?? }?? ?? ?? void?Insert(SListNode*?head,int?pos,DataType?x)?? {?? ????assert(pos?>=?0);?? ????SListNode*?cur?=?head;?? ????while?(--pos?&&?cur)?? ????{?????????????? ????????cur?=?cur->_next;?????????? ????}?? ????if?(pos?>?0)?? ????{?? ????????printf("pos位置大于鏈表長度!\n");?? ????????return;?? ????}?? ????SListNode*?newcur?=?_CreateNode(x);?? ????if?(cur->_next)?? ????{?? ????????SListNode*?next?=?cur->_next;?? ?????? ????????cur->_next?=?newcur;?? ????????newcur->_next?=?next;?? ????}?? ????else?if?(cur->_next?==?NULL)?? ????{?? ????????cur->_next?=?newcur;?? ????}?? }?? ?? ?? size_t?Length(SListNode*&?head)?? {?? ????size_t?count?=?0;?? ????SListNode*?cur?=?head;?? ????while?(cur)?? ????{?? ????????count++;?? ????????cur?=?cur->_next;?? ????}?? ????return?count;?? }?? ?? ?? void?PrintSList(SListNode*&?head)?? {?? ????if?(head?==?NULL)?? ????{?? ????????return;?? ????}?? ????SListNode*?cur?=?head;?? ????while?(cur)?? ????{?? ????????printf("%d->",?cur->_data);?? ????????cur?=?cur->_next;?? ????}?? ????printf("\n");?? }?? ?? ?? void?Test()?? {?? ????SListNode*?sList?=NULL;?? ????PushBack(sList,?1);?? ????PushBack(sList,?2);?? ????PushBack(sList,?3);?? ????PushBack(sList,?4);?? ????PushBack(sList,?5);?? ????PrintSList(sList);?? ?? ????PopBack(sList);?? ????PrintSList(sList);?? ?? ????PushFront(sList,?0);?? ????PrintSList(sList);?? ?? ????PopFront(sList);?? ????PrintSList(sList);?? ?? ????Insert(sList,?3,?10);?? ????PrintSList(sList);?? ?? ????int?ret?=?Length(sList);?? ????printf("單鏈表長度為:%d\n",?ret);?? }?? ?? ?? int?main()?? {?? ????Test();?? ????system("pause");?? ????return?0;?? }??
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。