当前位置:网站首页>Bidirectional linked list (we only need to pay attention to insert and delete functions)
Bidirectional linked list (we only need to pay attention to insert and delete functions)
2022-07-03 13:33:00 【fitpolo】
Dlink_list.h
#ifndef _DLINKLIST_H_
#define _DLINKLIST_H_
#include "stdio.h"
#include "stdlib.h"
typedef struct _tag_Dlink_list_node Dlink_list_node;
struct _tag_Dlink_list_node
{
Dlink_list_node *next;
Dlink_list_node *pre;
};
typedef struct _tag_Dlink_list TDlink_list;
struct _tag_Dlink_list
{
Dlink_list_node header;
int length;
};
typedef struct _tag_Dlink_list_value Dlink_list_value;
struct _tag_Dlink_list_value
{
Dlink_list_node node;
int value;// It can replace complex structures
};
TDlink_list* DLinkList_Create(void);
int DLinkList_Insert(TDlink_list* list, Dlink_list_node* node, int pos);
Dlink_list_node* DLinkList_Get(TDlink_list* list, int pos);
Dlink_list_node* DLinkList_Delete(TDlink_list* list, int pos);
// Additional extended functions
Dlink_list_node* DLinkList_DeleteNode(TDlink_list* list, Dlink_list_node* node);
void DLinkList_printf(TDlink_list* list);
#endif
Dlink_list.c
#include "Dlink_list.h"
TDlink_list* DLinkList_Create(void)
{
TDlink_list* ret = (TDlink_list*)malloc(sizeof(TDlink_list));
if( ret != NULL )
{
ret->length = 0;
ret->header.next = NULL;
ret->header.pre = NULL;
}
return ret;
}
int DLinkList_Insert(TDlink_list* list, Dlink_list_node* node, int pos)
{
int i;
Dlink_list_node* next = NULL;
Dlink_list_node* current = &(list->header);
if (current==NULL && list->length==0)
{
list->header.next = node;
list->header.pre = NULL;
node->next = NULL;
node->pre = NULL;
}else
{
for (i=0; i<pos&&(current->next!=NULL); i++)
{
current = current->next;
}
next = current->next;
// Draw your own picture
current->next = node;
node->next = next;
if (next!=NULL)
{
next->pre = node;
}
node->pre = current;
}
list->length++;
return 0;
}
Dlink_list_node* DLinkList_Get(TDlink_list* list, int pos)
{
int i = 0;
Dlink_list_node *ret = NULL;
if (list->length>pos)
{
ret = list->header.next;
for (i=0; i<pos; i++)
{
ret = ret->next;
}
}
return ret;
}
Dlink_list_node* DLinkList_Delete(TDlink_list* list, int pos)
{
int i = 0;
Dlink_list_node *current = NULL;
Dlink_list_node *ret = NULL;
Dlink_list_node *next = NULL;
if (list->length && list->length>pos)
{
current = &(list->header);
for (i=0; i<pos; i++)
{
current = current->next;
}
ret = current->next;
next = ret->next;
current->next = next;
if (next!=NULL)
{
if (current == &(list->header) )
{
next->pre = NULL;
}else
{
next->pre = current;
}
}
list->length--;
}else
{
printf("DLinkList_Delete error %d-%d\n",list->length,pos);
}
return ret;
}
Dlink_list_node* DLinkList_DeleteNode(TDlink_list* list, Dlink_list_node* node)
{
int i;
Dlink_list_node *ret = NULL;
Dlink_list_node *current = &(list->header);
for (i=0; i<list->length; i++)
{
if (current->next == node)
{
ret = current->next;
break;
}
current = current->next;
}
if (ret != NULL)
{
DLinkList_Delete(list,i);
}
return ret;
}
void DLinkList_printf(TDlink_list* list)
{
int i;
Dlink_list_node *current = list->header.next;
Dlink_list_value *tmp;
printf("len:%d-",list->length);
if (current != NULL)
{
for (i=0; i<list->length; i++)
{
tmp = (Dlink_list_value*)current;
printf("[i:%d-v:%d]-",i,tmp->value);
current = current->next;
}
printf("\n");
}
}
Test code
#include "stdio.h"
#include "stdint.h"
#include "Dlink_list.h"
int main(void)
{
#define BUF_SIZE 10
int i;
TDlink_list *head;
Dlink_list_value buf[BUF_SIZE];
printf("hello \r\n");
for (i=0; i<BUF_SIZE; i++)
{
buf[i].value = i+1;
}
head = DLinkList_Create();
for (i=0; i<BUF_SIZE; i++)
{
DLinkList_Insert(head,(Dlink_list_node*)&buf[i],0);
}
DLinkList_printf(head);
// for (i=0; i<BUF_SIZE; i++)
// {
// DLinkList_Delete(head,0);
// DLinkList_printf(head);
// }
for (i=BUF_SIZE-1; i>=0; i--)
{
DLinkList_Delete(head,i);
DLinkList_printf(head);
}
while(1)
{
}
}
边栏推荐
- Elk note 24 -- replace logstash consumption log with gohangout
- Open PHP error prompt under Ubuntu 14.04
- HALCON联合C#检测表面缺陷——HALCON例程autobahn
- Students who do not understand the code can also send their own token, which is easy to learn BSC
- 编程内功之编程语言众多的原因
- 35道MySQL面试必问题图解,这样也太好理解了吧
- [quantitative trading] permanent portfolio, turtle trading rules reading, back testing and discussion
- Introduction to the implementation principle of rxjs observable filter operator
- Flutter动态化 | Fair 2.5.0 新版本特性
- Flink SQL knows why (VIII): the wonderful way to parse Flink SQL tumble window
猜你喜欢
Flink SQL knows why (19): the transformation between table and datastream (with source code)
Flink SQL knows why (17): Zeppelin, a sharp tool for developing Flink SQL
Unity EmbeddedBrowser浏览器插件事件通讯
Libuv库 - 设计概述(中文版)
[email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g"/>
Start signing up CCF C ³- [email protected] chianxin: Perspective of Russian Ukrainian cyber war - Security confrontation and sanctions g
[quantitative trading] permanent portfolio, turtle trading rules reading, back testing and discussion
Kivy教程之 盒子布局 BoxLayout将子项排列在垂直或水平框中(教程含源码)
The difference between stratifiedkfold (classification) and kfold (regression)
MySQL constraints
道路建设问题
随机推荐
双链笔记 RemNote 综合评测:快速输入、PDF 阅读、间隔重复/记忆
The latest BSC can pay dividends. Any B usdt Shib eth dividend destruction marketing can
Open PHP error prompt under Ubuntu 14.04
35道MySQL面试必问题图解,这样也太好理解了吧
The R language GT package and gtextras package gracefully and beautifully display tabular data: nflreadr package and gt of gtextras package_ plt_ The winloss function visualizes the win / loss values
静态链表(数组的下标代替指针)
R language uses the data function to obtain the sample datasets available in the current R environment: obtain all the sample datasets in the datasets package, obtain the datasets of all packages, and
JS 将伪数组转换成数组
Convolution emotion analysis task4
PowerPoint 教程,如何在 PowerPoint 中将演示文稿另存为视频?
Students who do not understand the code can also send their own token, which is easy to learn BSC
SQL Injection (GET/Select)
Flutter动态化 | Fair 2.5.0 新版本特性
Universal dividend source code, supports the dividend of any B on the BSC
Flink SQL knows why (XIV): the way to optimize the performance of dimension table join (Part 1) with source code
网上开户哪家证券公司佣金最低,我要开户,网上客户经理开户安全吗
Several common optimization methods matlab principle and depth analysis
Flink SQL knows why (XV): changed the source code and realized a batch lookup join (with source code attached)
Unity Render Streaming通过Js与Unity自定义通讯
双链笔记 RemNote 综合评测:快速输入、PDF 阅读、间隔重复/记忆