博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
双向循环链表
阅读量:3951 次
发布时间:2019-05-24

本文共 3012 字,大约阅读时间需要 10 分钟。

DLinkedList.c

#include"DLinkedList.h"// 创建返回链表的头结点.ListNode* ListCreate() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode)); head->_next = head; head->_prev = head; return head;}// 双向链表销毁void ListDestory(ListNode* plist) {
ListNode* first = plist->_next; ListNode* second = first->_next; while (plist->_next != plist) {
plist->_next = second; free(first); first = second; second = second->_next; } free(plist);}// 双向链表打印void ListPrint(ListNode* plist) {
ListNode* head = plist; ListNode* first = head->_next; while (first != head) {
printf("%d ", first->_data); first = first->_next; } printf("\n");}ListNode* BuyNode(LTDataType x) {
ListNode* newnode = (ListNode*)malloc(sizeof(ListNode)); newnode->_data = x; newnode->_next = NULL; newnode->_prev = NULL; return newnode;}// 双向链表尾插void ListPushBack(ListNode* plist, LTDataType x) {
ListNode* head = plist; ListNode* tail = head->_prev; ListNode* newnode = BuyNode(x); tail->_next = newnode; newnode->_next = head; newnode->_prev = tail; head->_prev = newnode;}// 双向链表尾删void ListPopBack(ListNode* plist) {
ListNode* head = plist; ListNode* tail = head->_prev; ListNode* newTail = tail->_prev; if (head != tail) {
head->_prev = newTail; newTail->_next = head; free(tail); }}// 双向链表头插void ListPushFront(ListNode* plist, LTDataType x) {
ListNode* newnode = BuyNode(x); ListNode* head = plist; ListNode* first = head->_next; head->_next = newnode; newnode->_prev = head; newnode->_next = first; first->_prev = newnode;}// 双向链表头删void ListPopFront(ListNode* plist) {
ListNode* head = plist; ListNode* first = head->_next; ListNode* second = first->_next; free(first); head->_next = second; second->_prev = head;}// 双向链表查找ListNode* ListFind(ListNode* plist, LTDataType x) {
ListNode* first = plist->_next; while (first != plist) {
if (first->_data == x) {
return first; } first = first->_next; } return NULL;}// 双向链表在pos的前面进行插入void ListInsert(ListNode* pos, LTDataType x) {
ListNode* prev = pos->_prev; ListNode* newnode = BuyNode(x); prev->_next = newnode; newnode->_prev = prev; newnode->_next = pos; pos->_prev = newnode;}// 双向链表删除pos位置的节点void ListErase(ListNode* pos) {
ListNode* prev = pos->_prev; ListNode* next = pos->_next; prev->_next = next; next->_prev = prev; free(pos);}

DLinkedList.h

#pragma once#include
#include
// 带头+双向+循环链表增删查改实现typedef int LTDataType;typedef struct ListNode{
LTDataType _data; struct ListNode* _next; struct ListNode* _prev;}ListNode;// 创建返回链表的头结点.ListNode* ListCreate();// 双向链表销毁void ListDestory(ListNode* plist);// 双向链表打印void ListPrint(ListNode* plist);// 双向链表尾插void ListPushBack(ListNode* plist, LTDataType x);// 双向链表尾删void ListPopBack(ListNode* plist);// 双向链表头插void ListPushFront(ListNode* plist, LTDataType x);// 双向链表头删void ListPopFront(ListNode* plist);// 双向链表查找ListNode* ListFind(ListNode* plist, LTDataType x);// 双向链表在pos的前面进行插入void ListInsert(ListNode* pos, LTDataType x);// 双向链表删除pos位置的节点void ListErase(ListNode* pos);

转载地址:http://zhwzi.baihongyu.com/

你可能感兴趣的文章
盘点那些让程序员目瞪口呆的Bug都有什么?
查看>>
40个只有程序员才看得懂的段子
查看>>
薅资本主义羊毛,用Google免费GPU
查看>>
79页区块链报告:从理论到实践(附下载)
查看>>
这30个大数据热词,你都懂吗?
查看>>
最受世界 500 强企业青睐的编程语言,竟是它们?
查看>>
小程序“头脑王者” 因违规被微信下架整改 小程序不可逾越的红线
查看>>
300张小抄表搞定机器学习知识点:学习根本停不下来!
查看>>
《中国区块链行业发展报告2018》全文发布!
查看>>
数据之美,堪比好莱坞大片!
查看>>
"巧"仿蚂蚁森林水滴动效
查看>>
用算法撩妹都不会,别跟我说你是程序员
查看>>
高盛发布区块链报告:从理论到实践(中文版)
查看>>
“揭秘”大数据的10个神话!
查看>>
支付宝宣布:狗年还玩五福!全网第一份集福攻略在这里
查看>>
斯坦福大学10张图剖析人工智能发展新趋势
查看>>
分析千万条数据后,终于找到了北上广深租金最低的地铁房
查看>>
使用 Charles 抓取 app 数据包
查看>>
未来,改变世界的将是这些......
查看>>
2018年大数据趋势
查看>>