C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
来源:互联网 发布:java 生成jar包命令 编辑:程序博客网 时间:2024/05/16 19:38
#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include<stdlib.h>#include<malloc.h>#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){ 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/1734401
0 0
- C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
- 【C语言】静态顺序表的实现(包括头插、头删、尾插、尾删、查找、删除指定位置)
- C++类中单链表的实现(头插、尾插、头删、尾删、指定位置插入、指定位置删除、链表长度、清空链表、链表排序)
- 单链表的头插、中插、尾插、删除、逆序、显示(C语言实现)
- 单链表的基本操作(尾插,尾删,头插,头删,查找,指定位置插入、删除,指定元素删除、全部删除等)
- C++语言实现单链表的尾插,尾删,头插,头删等
- C语言实现链表的头插,尾插,插入,修改,删除和遍历
- 数组的链表实现:创建(头插/尾插)、打印、删除、插入
- 数据结构中静态顺序表的初始化、尾插、尾删、头插、头删、任意位置的插入及删除
- 单链表的头插 尾插 反序 遍历 插入 删除
- C语言【顺序表】顺序表的初始化,头插,尾插,头删,尾删,增删查改,全删
- 数据结构 单链表 头插 尾插 指定位置前插后插 以及 删除指定元素 C++ 面向对象方法实现
- 链表的插入(头插,尾插,中间插)
- 链表的创建(头插,尾插),插入,删除
- 建立单链表【头插,尾插】
- 单链表的头插、尾插、删除、合并等操作
- 顺序表的实现(头插,头删尾插,尾删)
- c语言:【顺序表】静态顺序表的头插、头删
- 常用正则表达式大全
- 【指针篇】C语言:指针与数组的区别,数组指针与指针数组的剖析。
- 【通讯录系统】:实现一个通讯录(可添加、删除、修改、查找、显示、清空、排序)
- C语言:使用malloc开辟一个3*4的二维数组,并将内容初始化为1-12.
- jsonString 与bean互转
- C语言:单链表的实现(包括:尾插、尾删、头插、头删、指定位置插入、长度、打印)
- C语言:【单链表】删除一个无头单链表的非尾节点
- Android学习笔记02——EditText
- C语言:【单链表】在无头单链表的一个非头节点前插入一个节点
- C语言:【单链表】逆置反转单链表
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
- C语言:【单链表】查找单链表的倒数第k个节点,要求只能遍历一次
- C++:复数类构造函数、拷贝构造、运算符重载、析构函数
- C++【面试题】:类实现万年历(日期计算器),(含构造函数、拷贝构造、运算符重载、析构函数)