#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode, *DuLinkList;
// 对双链表进行初始化
Status InitDLinkList(DuLinkList &L){
L = (DuLinkList)malloc(sizeof(DuLNode));
if(L == NULL) return ERROR;
L->prior = NULL;
L->next = NULL;
return OK;
}
// 插入数据
Status ListInsert_Dul(DuLinkList &L, int i, ElemType e){
if(i < 1) return ERROR;
DuLinkList p, s;
p =(DuLinkList)malloc(sizeof(DuLNode ));
p = L;
int j = 0;
if(p == NULL) return ERROR;
while(p != NULL && j < i - 1){
p = p->next;
j++;
}
s =(DuLinkList)malloc(sizeof(DuLNode ));
if(s == NULL) return ERROR;
s->data = e;
s->next = p->next;
if(p->next != NULL)
p->next->prior = s;
s->prior = p;
p->next = s;
return OK;
}
// 查询指定位序数据
DuLNode * GetElemP_Dul(DuLinkList &L, int i){
if(i < 1) return ERROR;
DuLinkList p = (DuLinkList)malloc(sizeof(DuLNode));
p = L->next;
int j = 1;
while(p && j < i){
p = p->next;
j++;
}
if(!p || j > i) return ERROR;
return p;
}
// 头插法
Status ListInsertpPre_Dul(DuLinkList &L, int i, ElemType e){
DuLinkList p = L;
if(!(p = GetElemP_Dul(L, i))) return ERROR;
DuLinkList s =(DuLinkList)malloc(sizeof(DuLNode ));
if(s == NULL) return ERROR;
s->data = e;
s->prior = p->prior;
p->prior->next = s;
s->next = p;
p->prior = s;
return OK;
}
//删除指定数据
Status ListDelete_Dul(DuLinkList &L, int i, ElemType &e){
DuLinkList p;
if(!(p = GetElemP_Dul(L, i))) return ERROR;
e = p->data;
printf("%d已经被删除", e);
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
return OK;
}
// 查询所有
Status ListGetElem(DuLinkList L){
DuLinkList p = L->next;
while(p != NULL){
printf("%d ", p->data);
p = p->next;
}
return OK;
}
int main(){
DuLinkList L;
InitDLinkList(L);
printf("要插入的数据是:\n\n");
for(int i = 0; i < 10; i++)
ListInsert_Dul(L, i+1, i);
ListGetElem(L);
printf("\n\n");
int e = 20;
ListInsertpPre_Dul(L, 3, e);
ListGetElem(L);
printf("\n\n");
int del;
ListDelete_Dul(L, 3, del);
printf("\n\n");
ListGetElem(L);
printf("\n\n");
return 0;
}
c语言数据结构之双链表基本操作
最新推荐文章于 2022-05-04 11:03:21 发布