#include<stdio.h>
#include<stdlib.h>
typedef struct binode
{
int data;
struct binode* next;
struct binode* prev;
}BiNode;
typedef struct bilist
{
BiNode* first;
BiNode* last;
}BiList;
void Insert_List(BiList* L,BiNode* q);
BiList* create_bilist(void)
{
BiList* L=(BiList*)malloc(sizeof(BiList));
L->first=NULL;
L->last=NULL;
return L;
}
void Create_List(BiList* L)
{
int data;
while (1)
{
scanf("%d",&data);
if(data == 999)
{
break;
}
BiNode* s=(BiNode*)malloc(sizeof(BiNode));
s->data=data;
s->next=NULL;
s->prev=NULL;
if(L->first == NULL)
{
L->first=s;
L->last=s;
}
else
{
s->prev = L->last;
L->last->next = s;
L->last = s;
}
}
}
void Insert_List(BiList* L,BiNode* q)
{
if(L->first == NULL)
{
return;
}
BiNode* p = L->first;
while (p)
{
if(p->data>q->data)
{
break;
}
p=p->next;
}
if(p == NULL)
{
L->last->next = q;
q->prev = L->last;
L->last = q;
}
else
{
if(L->first==p)
{
p->prev = q;
q->next = p;
L->first =q;
}
else
{
q->next = p;
p->prev->next = q;
q->prev =p->prev;
p->prev = q;
}
}
}
void Printf_BiList(BiList* L)
{
BiNode* p=L->first;
while (p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void Delete_List_data(BiList* L,int data)
{
if(L->first == NULL)
{
return;
}
BiNode* pk = L->first;
while (pk)
{
if(pk->data == data)
{
break;
}
pk = pk->next;
}
if(pk == NULL)
{
printf("No\n");
return;
}
else
{
if(pk == L->first)
{
L->first = pk->next;
pk->next = NULL;
}
else if(pk==L->last)
{
pk->prev->next =pk->next;
L->last = pk->prev;
}
else
{
pk->prev->next =pk->next;
pk->next->prev =pk->prev;
pk->next = NULL;
}
free(pk);
}
}
void Delete_List(BiList* L)
{
BiNode* pk = L->first;
if(pk == NULL)
{
return;
}
while (pk)
{
L->first =L->first->next;
pk->next = NULL;
pk->prev = NULL;
free(pk);
pk=L->first;
}
printf("Delete success\n");
}
void Delete_All_data(BiList* L,int data)
{
BiNode* pk = L->first;
while (L->first && pk->data == data)
{
L->first = L->first->next;
pk->next = NULL;
free(pk);
pk = L->first;
}
while (pk)
{
if(pk->data == data)
{
if(pk->next == NULL)
{
pk->prev->next = pk->next;
break;
}
BiNode* p;
pk->prev->next = pk->next;
pk->next->prev = pk->prev;
p = pk->next;
pk->next = NULL;
free(pk);
pk = p;
continue;
}
pk = pk->next;
}
}
int main()
{
BiList* L=create_bilist();
Create_List(L);
Delete_List(L);
Printf_BiList(L);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术