【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
来源:互联网 发布:哈布斯堡 知乎 编辑:程序博客网 时间:2024/05/28 11:49
#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;}
本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1747913
0 0
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
- 【C++】用类实现单向单链表的尾插PushBack(),尾删PopBack(),打印PrintSlist()。
- C语言:【动态顺序表】动态顺序表的初始化、打印、尾插PushBack、尾删PopBack
- 双向链表 PushBack/PopFront
- 【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)
- C语言实现顺序表的所有操作代码
- 单链表的实现操作(C语言)
- C语言之二叉树(包括遍历的实现)
- 2 双向链表 PushBack/PopFront
- <C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
- unix下面目录的详细操作(包括实现给定目录遍历下面所有文件)
- C语言文件操作包括static,extern的学习笔记
- 所有的排序c语言实现
- C语言实现单链表的各种操作
- C语言实现单链表的基本操作
- 【String类】C++:String类的传统写法与现代写法
- 《剑指offer》字符串中的字符替换
- 【C++】实现动态顺序表的PushBack(),PopBack(),PushFront(),PopFront(),Find(),Insert
- 【C++】用类实现单向单链表的尾插PushBack(),尾删PopBack(),打印PrintSlist()。
- 【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- 【继承与多态】C++:继承中的赋值兼容规则,子类的成员函数,虚函数(重写),多态
- 【C++】模版类实现普通类静态顺序表
- 【C++】认识模版函数
- 【C++】模版实现双向链表的各种操作(如:逆置、去重Unique、分类(冒泡)、合并)
- 【C++】容器适配器实现栈Stack的各种功能(入栈、出栈、判空、大小、访问所有元素等)
- 【C++】容器适配器实现队列Queue的各种功能(入队、出队、判空、大小、访问所有元素等)
- 论IT就业发展趋势
- 【C++】类型萃取技术实现静态顺序表