双向链表操作c语言 函数,c语言 双向链表的基础操作
//头文件
#pragma once
typedef int DataType;
typedef struct LinkList
{
DataType _data;
struct LinkList* _next;
struct LinkList* _prev;
}LinkList,*pLinkList;
void InitList(pLinkList pNode);
pLinkList _BuyNode(pLinkList& pNode,DataType x);
void PrintList(pLinkList pHead);
void PushBack(pLinkList& pHead,DataType x);
void PopBack(pLinkList& pHead);
void PushFront(pLinkList& pHead,DataType x);
void PopFront(pLinkList& pHead);
pLinkList Find(pLinkList pHead, DataType x);
void Insert(pLinkList pos,DataType x);
void Erase(pLinkList& pHead, pLinkList pos);
void Reverse(pLinkList& pHead);
void DestroyList(pLinkList& pHead);
//函数文件
#include
#include
#include"LinkList.h"
#include
//初始化
void InitList(pLinkList pNode)
{
assert(pNode);
if (pNode->_next == NULL)
{
pNode->_prev = NULL;
}
}
//创建节点
pLinkList _BuyNode(pLinkList& pNode, DataType x)
{
pNode = (pLinkList)malloc(sizeof(LinkList));
pNode->_data = x;
pNode->_next = NULL;
pNode->_prev = NULL;
return pNode;
}
//遍历输出链表数据域
void PrintList(pLinkList pHead)
{
pLinkList head = pHead;
if(pHead == NULL)
{
printf("链表为空!\n");
return;
}
while (head)
{
printf("%d ",head->_data);
head = head->_next;
}
printf("\n");
}
//尾插
void PushBack(pLinkList& pHead, DataType x)
{
pLinkList head = pHead;
if (head == NULL)
{
_BuyNode(pHead, x);
return;
}
while (head->_next)
{
head = head->_next;
}
head->_next = _BuyNode(head->_next,x);
head->_next->_prev = head;
}
//尾删
void PopBack(pLinkList& pHead)
{
pLinkList head = pHead;
pLinkList tmp = NULL;
if (pHead == NULL)
{
printf("链表已空!\n");
return;
}
if (head->_next == NULL)
{
free(head);
pHead = NULL;
return;
}
while (head->_next)
{
head = head->_next;
}
tmp = head->_prev;
tmp->_next = NULL;
free(head);
}
//头插
void PushFront(pLinkList& pHead, DataType x)
{
pLinkList head = pHead;
pLinkList tmp = pHead;
if (pHead == NULL)
{
_BuyNode(pHead, x);
return;
}
pHead=_BuyNode(head->_prev, x);
pHead->_next = tmp;
}
//头删
void PopFront(pLinkList& pHead)
{
pLinkList tmp = pHead;
if (pHead == NULL)
{
printf("链表已空!\n");
return;
}
pHead = pHead->_next;
if (pHead)
{
pHead->_prev = NULL;
}
free(tmp);
}
//查找
pLinkList Find(pLinkList pHead, DataType x)
{
pLinkList head = pHead;
assert(pHead);
while (head)
{
if (head->_data == x)
return head;
head = head->_next;
}
return NULL;
}
//中插_之后
void Insert(pLinkList pos, DataType x)
{
pLinkList tmp = pos->_next;
assert(pos);
_BuyNode(pos->_next, x);
pos->_next->_prev = pos;
pos->_next->_next = tmp;
}
//中删
void Erase(pLinkList& pHead, pLinkList pos)
{
pLinkList tmp = pos;
assert(pos);
if (pos->_next == NULL)
{
pos->_prev->_next = NULL;
free(tmp);
return;
}
if (pos==pHead)
{
pHead = pHead->_next;
pHead->_prev = NULL;
free(pos);
return;
}
tmp->_prev->_next = tmp->_next;
tmp->_next->_prev = tmp->_prev;
free(pos);
}
//逆置
void Reverse(pLinkList& pHead)
{
pLinkList head = pHead;
pLinkList tmp = pHead;
if (pHead == NULL&&pHead->_next == NULL)
return;
while (head)
{
tmp = head->_next;
head->_next = head->_prev;
head->_prev = tmp;
if (head->_prev == NULL)
pHead = head;
head = tmp;
}
}
//销毁
void DestroyList(pLinkList& pHead)
{
while (pHead)
{
PopFront(pHead);
}
}
//测试用例 主函数
#include"LinkList.h"
#include
void test1()
{
pLinkList pHead=NULL;
//PushBack(pHead, 1);
//PushBack(pHead, 2);
//PushBack(pHead, 3);
// PushBack(pHead, 4);
//PushBack(pHead, 5);
//PrintList(pHead);
//PopBack(pHead);
//PopBack(pHead);
//PopBack(pHead);
//PopBack(pHead);
//PopBack(pHead);
//PopBack(pHead);
PushFront(pHead, 1);
PushFront(pHead, 2);
PushFront(pHead, 3);
PushFront(pHead, 4);
PushFront(pHead, 5);
PrintList(pHead);
//PopFront(pHead);
//PopFront(pHead);
//PopFront(pHead);
//PopFront(pHead);
//PopFront(pHead);
//PopFront(pHead);
//printf("%d\n",Find(pHead, 6));
Insert(Find(pHead, 1), 6);
Erase(pHead,Find(pHead,2));
PrintList(pHead);
Reverse(pHead);
PrintList(pHead);
DestroyList(pHead);
PrintList(pHead);
}
int main()
{
test1();
return 0;
}
双向链表操作c语言 函数,c语言 双向链表的基础操作相关推荐
- 分段函数if语句_C语言函数系列之库函数中基础必会函数(一)
!!!阅前提醒:!!! 此文为c语言函数系列的第一篇,全系列字数将达到1w字以上且全为干货内容,请各位仔细阅读并打开编译器运行文章中出现的代码进行试验以确保能理解文章内容 if判断函数(以图中显示代码 ...
- 快速傅里叶变换c语言函数,C语言实现FFT(快速傅里叶变换)
while(1); } #include #include /********************************************************************* ...
- 东方财富 c语言函数,C语言的歧义
本文来自:/?p=830 语言是人与人相互沟通的途径,而计算机语言则是人和计算机沟通的途径.就算是任何再完美的自然语言都会有歧义,但是又是什么让人和计算计算机间产生了歧义呢? 下面这篇文章来自Gowr ...
- 潭州教育c语言函数,C语言知识点(2)
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 2.3 整型数据 整形常量 在C语言程序中,整型常量可以用十进制.八进制和十六进制等形式表示.十进制基本常量用一串连续的数字表示,例如32767.-327 ...
- 装箱问题c语言函数,C语言基于贪心算法解决装箱问题的方法
本文实例讲述了C语言基于贪心算法解决装箱问题的方法.分享给大家供大家参考,具体如下: 问题描述: 有一些箱子,容量为V,同时有n个物品,每个物品有一个体积(小于等于箱子容量),要求将物品全部装入箱子中 ...
- 数组排序c语言函数_C语言如何写出返回数组最大最小值之差的函数(C primer plus 10-5)...
程序内容: 编写一个函数,返回储存在都变了类型数组中最大值和最小值的差值,并在一个简单的程序中测试该函数. 程序为C Primer Plus第十章第四题的答案示例 附:程序代码为本人亲自编写,并非书内 ...
- 打印英文年历C语言函数,C语言打印年历
voidshow_year(int year) {inti,j,k,t,n; // 用来辅助计数int table[24][21] = {0}; // 年历数组int month_day[12] = ...
- 线性插值c语言函数,CG中线性插值的基础-仿射函数(affine function)的基础知识解释...
Note 这是对MIT Foundation of 3D Computer Graphics附录B的翻译,本附录讲解了2D/3D仿射函数的基础知识.本书内容仍在不断的学习中,因此本文内容会不断的改进. ...
- 计算机基础ppt操作试题,MS Office试题:PPT的基础操作题
累了,就休息,你又不是伞,何必硬撑.困了就睡睡觉,别熬夜太久,好好爱自己,爱这个独一无二的自己.朝着计算机等级考试的方向前进,和小编一起复习MS Office试题吧. PPT题 在科技馆工作的小文需要 ...
最新文章
- 【UGV】小车一些图片
- python csv文件创建时间_记录 python 根据csv文件自动创建表插入数据
- 【Docker】Linux安装docker-compose
- Enumeration和Iterator的区别
- 解析应用结构,优化网络效能
- 口译务实——Unit 10
- Kava将于下午2时重新启动Kava Chain
- 【论文】Awesome Relation Extraction Paper(关系抽取)(PART III)
- JS引擎线程的执行过程的三个阶段(二)
- AJAX,JSON 夜鹰
- Android 检测键盘是否显示及隐藏键盘
- 免费edu邮箱申请注册地址
- “左眼跳财,右眼跳灾”
- 前端学习资料网址汇总
- 自动化控制面试问题整理
- python之tkinter Pack使用
- 老韩思考:为什么毕业后3年,同学之间相差如此大?
- PAT (Basic Level) Practise (中文) 1004成绩排名(20)
- PInterest瀑布流类网站收集
- 365gps怎样修改服务器,gps365定位器怎么用(gps定位器ID号怎么获取)