#include<stdio.h>
#include<stdlib.h>
struct linknode
{
int data;
struct linknode* next;
struct linknode* pre;
};
struct list
{
struct linknode* head;
struct linknode* tail;
};
//结点分配内存
struct linknode* creat_node(int data)
{
struct linknode* newnode = malloc(sizeof(struct linknode));
if (newnode == NULL)
{
return;
}
newnode->data = data;
newnode->next = NULL;
newnode->pre = NULL;
return newnode;
}
//初始化链表
void init_list(struct list* list)
{
list->head = creat_node(0);
list->tail = creat_node(0);
list->head->next = list->tail;
list->tail->next = NULL;
}
//遍历并输出链表中的各个元素
void list_travel(struct list* list)
{
for (struct linknode* pnode = list->head; pnode != list->tail; pnode = pnode->next)
{
struct linknode* first = pnode;
struct linknode* mid = first->next;
struct linknode* last = mid->next;
if (empty_list(list))
{
printf("链表为空\n");
break;
}
if (mid != list->tail)
{
printf("元素为:%d\n", mid->data);
}
}
}
//往链表中插入结点
void insert_list(struct list* list, int data)
{
struct linknode* newnode = creat_node(data);
for (struct linknode* pnode = list->head; pnode != list->tail; pnode = pnode->next)
{
struct linknode* first = pnode;
struct linknode* mid = first->next;
struct linknode* last = mid->next;
if (mid->data >= newnode->data || mid == list->tail)
{
pnode->next = newnode;
newnode->next = mid;
mid->pre = newnode;
newnode->pre = pnode;
break;
}
}
}
//从链表中删除节点
void delete_list(struct list* list, int data)
{
for (struct linknode* pnode = list->head; pnode != list->tail; pnode = pnode->next)
{
struct linknode* first = pnode;
struct linknode* mid = first->next;
struct linknode* last = mid->next;
if (data == mid->data && mid != list->tail)
{
first->next = last;
last->pre = first;
free(mid);
break;
}
}
}
//清空链表
void clear_list(struct list* list)
{
while (!empty_list(list))
{
struct linknode* first = list->head;
struct linknode* mid = first->next;
struct linknode* last = mid->next;
first->next = last;
last->pre = first;
free(mid);
}
}
//判断是否为空链表
int empty_list(struct list* list)
{
if (list->head->next ==list->tail)
return 1;
return 0;
}
int main()
{
struct list list;
init_list(&list);
for (int i = 10; i < 50; i += 10)
{
insert_list(&list, i);
}
list_travel(&list);
delete_list(&list, 20);
delete_list(&list, 40);
list_travel(&list);
clear_list(&list);
list_travel(&list);
return 0;
}
呆呆小雅
- 粉丝: 1369
- 资源: 72
最新资源
- 简单好用的移动手机端ASP报名程序(含access数据库)
- 群晖NAS中搭建WordPress站点
- 2023-2008年上市公司企业耐心资本数据、耐心资本所占比重数据集.txt
- 三菱电梯主板地址表参数 三菱电梯地址码, KCD-116主板地址参数, MAXIEZ电梯主板地址参数, VFGLC电梯主板地址参数, 可以修改电梯楼层显示、基站、强迫关门、消防功能、开关门时间等参数
- e7d80fa8f5dbfd158d6f4ffe36354c85.docx
- 地级市CO2排放数据集(2000-2023年).dta
- 地级市CO2排放数据集(2000-2023年).xlsx
- 基于python的手写数字识别系统源代码(完整前后端+mysql+说明文档+LW).zip
- 三相感应异步电机的参数辨识,大厂成熟的C代码,附赠仿真模型: 1. 第一步,辨识定子电阻; 2. 第二步,辨识转子电阻和漏感; 3. 第三步,辨识互感并计算空载电流 大厂成熟的代码,可以直接移植,本
- C#编写的一款读取xml文件的mapping图软件 可以自由定位位置,统计数量,蛇形走位 主要用在晶圆图谱识别
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈