#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
//双向链表 结点
typedef struct Node{
int data;
Node * prior;
Node * next;
}Node;
//链表管理 节点
typedef struct Link{
Node * front;
Node * rear;
}Link;
//链表的初始化
void inital(Link &link){
link.front=NULL;
link.rear=NULL;
}
//链表的插入
void insert(Link &link,int x){
//创建新节点
Node * p=(Node *)malloc(sizeof(Node));
p->data=x;
p->prior=NULL;
p->next=NULL;
if(link.rear==NULL){
link.rear=p;
link.front=p;
}else{
Node * q=link.rear;
q->next=p;
p->prior=q;
link.rear=p;
}
}
//链表的删除
void remove(Link &link,int x){
if(link.rear==NULL) return;
Node * p=link.front;
while(p!=NULL){
if(p->data==x) break;
else p=p->next;
}
if(p!=NULL){//找到节点 删除
if(p==link.front && p==link.rear){//只有一个节点 删除
link.front=NULL;
link.rear=NULL;
free(p);
} else if(p==link.front){//删除第一个节点
link.front=p->next;
(p->next)->prior=NULL;
free(p);
} else if(p==link.rear){//删除第最后个节点
link.rear=p->prior;
(p->prior)->next=NULL;
free(p);
}else {//普通删除
Node * q=p->prior;
q->next=p->next;
(p->next)->prior=q;
free(p);
}
}
}
void search(Link &link){
if(link.rear==NULL) return;
Node * p=link.front;
while(p!=NULL){
printf("%d--->",p->data);
p=p->next;
}
printf("\n");
}
int main(int argc, char* argv[])
{
Link link;
inital(link);
insert(link,1);
insert(link,2);
insert(link,3);
insert(link,4);
insert(link,5);
insert(link,6);
insert(link,7);
insert(link,8);
insert(link,9);
insert(link,10);
search(link);
remove(link,5);
remove(link,4);
remove(link,10);
search(link);
printf("Hello World!\n");
return 0;
}
双向链表实现 插入删除
最新推荐文章于 2023-11-14 20:36:35 发布