#include<stdio.h>
#include<stdlib.h>
typedef struct DuLNode {
int data;
struct DuLNode* prior;
struct DuLNode* next;
}DuLNode,*DuLinkList;
//创建节点
void Create_Dul(DuLinkList &L) {
L = (DuLinkList)malloc(sizeof(DuLNode));
}
//初始化
void Init_DuL(DuLinkList &L) {
Create_Dul(L);
DuLinkList p = L;
if (!p) {
printf("error");
exit(0);
}
else
{
p->next = nullptr;
p->prior = nullptr;
}
printf("初始化成功\n");
}
//判空
int IsEmpty_Dul(DuLinkList L) {
return L->next == NULL;
}
//求链表长度
int Lenth_Dul(DuLinkList L) {
int i = 0;
DuLinkList p = L->next;
while (p)
{
i++;
p = p->next;
}
return i;
}
//插入
void Insert_Dul(DuLinkList &L, int i, int e) {
if (i<1 || i>Lenth_Dul(L) + 1||!L) exit(0);//位置有误
DuLinkList p = L;
DuLinkList k = nullptr;
int j = 0;
while (p->next&&j<i-1)
{
p = p->next;
++j;
}
k = (DuLinkList)malloc(sizeof(DuLNode));
if (!k) exit(0);
else
{
k->data = e;
if (p->next) {
k->prior = p;
k->next = p->next;
k->next->prior = k;
p->next = k;
}
else {//如果是最后一个元素
k->next = p->next;
k->prior = p;
p->next = k;
}
}
}
//删除
void Delete_Dul(DuLinkList L, int i) {
if (i<1 || i>Lenth_Dul(L)||!L) exit(0);
DuLinkList p = L;
DuLinkList k = nullptr;
int j = 0;
while (p->next&&j<i-1)
{
p = p->next;
++j;
}
k = p->next;
if (k) {
p->next = k->next;
k->next->prior = p;
}
else {
p->next = NULL;
}
free(k);
}
//返回第i个元素的值
int GetElem_Dul(DuLinkList L, int i) {
if (!L || i<1 || i>Lenth_Dul(L)) exit(0);
DuLinkList p = L;
for (int j = 0; j < i; j++) {
p = p->next;
}
return p->data;
}
//获取元素的位置
int Locate_Dul(DuLinkList L, int e) {
DuLinkList p = L->next;
int i = 1;
while (p)
{
if (p->data == e) return i;
else
{
p = p->next;
i++;
}
}
return 0;//没找到
}
//清空数据
void ClearData_Dul(DuLinkList &L) {
if (!L) exit(0);
else {
DuLinkList p = L->next;
DuLinkList q;
while (p)
{
q = p->next;
free(p);
p = q;
}
L->next = NULL;
}
}
//清空整个表
void Destroy_Dul(DuLinkList& L) {
if (!L) exit(0);
else {
ClearData_Dul(L);
free(L);
}
}
//打印
void Print_Dul(DuLinkList L) {
if (!L) exit(0);
DuLinkList p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
}
int main() {
DuLinkList L=nullptr;
Create_Dul(L);
Init_DuL(L);
int len = Lenth_Dul(L);
printf("长度是%d\n", len);
for (int i = 1; i < 10; i++)
{
Insert_Dul(L, 1, i);
}
Print_Dul(L);
printf("\n");
Delete_Dul(L, 2);
Print_Dul(L);
printf("\n");
ClearData_Dul(L);
printf("长度是%d", Lenth_Dul(L));
Destroy_Dul(L);
return 0;
}```
数据结构---双向链表
最新推荐文章于 2024-09-23 22:27:40 发布