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