#include<stdio.h>
#include<stdlib.h>
//定义数据
typedef int E;
typedef struct ListNode* Node;
//结点定义
struct ListNode {
E element;//存储的数据
struct ListNode *next;//指向后面的结点
struct ListNode *prev;//指向前面的结点
};
//初始化双向链表
//变量头节点
void initList(Node head)
{
head->next = NULL;
head->prev = NULL;
}
//插入结点
//变量
int inserList(Node head,E element,int index)
{
if(index<1)
{
return 0;
}
while(--index)
{
head = head->next;
if(head==NULL)
{
return 0;
}
}
//创建插入的新结点
Node node=malloc(sizeof(struct ListNode));
//创建失败
if(node==NULL)
{
return 0;
}
node->element=element;
if(head->next!=NULL)
{
head->next->prev = node;
node ->next = head->next;
}
else
{
node->next = NULL;
}
head->next = node;
node->prev = head;
return 1;
}
//删除结点
//变量链表头结点,删除位序
int deleteList(Node head,int index)
{
if(index<1)
{
return 0;
}
while(--index)
{
head=head->next;
//越界
if(head==NULL)
{
return 0;
}
}
//下一个结点为空越界
if(head->next==NULL)
{
return 0;
}
//要删除的
Node node = head->next;
if(head->next->next)
{
head->next->next->prev=head;
head->next=head->next->next;
}
else
{
head->next=NULL;
}
free(node);
return 1;
}
int main()
{
//创建头结点
struct ListNode head;
//初始化双向链表
initList(&head);
//测试插入程序
inserList(&head,100,1);
inserList(&head,200,2);
inserList(&head,300,3);
inserList(&head,400,4);
inserList(&head,500,5);
deleteList(&head,5);
//打印链表
Node node = &head;
do{
node = node->next;
printf("%d->",node->element);
}while(node->next);
}
数据结构笔记(三)双向链表
于 2024-03-11 19:03:59 首次发布