双链表的基本操作
//定义
typedef struct DNode //定义双链表结点类型
{
ElemType data; //数据域
struct DNode *prior , *next; //前驱和后继指针
}DNode , *DLinkList;
//初始化
bool InitDLinkList(DLinkList &L)
{
L = new DNode; //分配一个头结点
if (L == NULL)
return false; //内存不足,分配失败
L->prior = NULL; //头结点的prior永远指向NULL
L->next = NULL; //头结点之后暂时没有结点
return true;
}
//判空操作
Status Empty(DLinkList L)
{
return (L == NULL);
}
//创建双向循环链表
status CreatList_R(DLinkList &L, int n)
{
L = new DNode ; //初始化一个双向循环链表,表中暂时只有一个头结点
L->next = L; //头结点的next域指向头结点
L->prior = L; //头结点的prior域指向头结点
DNode *p = L; //结点指针p初始化指向头结点
for (int i = 0; i < n; i++)
{
DNode *s = new DNode; //生成一个新结点s
cin >> s->data; //将输入的数据存放在新结点的数据域中
//将新结点链接在头结点之后
p->next = s;
s->next = L;
s->prior = p;
p = s;
}
return ok;
}
//求表长
int ListLength(DLinkList L)
{
DNode *p = L->next;
int len = 0;
while (p != L)
{
len++;
p = p->next;
}
return len;
}
//取值
Status GetElem_D(DLinkList L, int i, ElemType &e)
{
int j = 1;
DNode *p = L->next;
while (p && j < i)
{
p = p->next;
j++;
}
if (!p || j > i)
return error;
e = p->data;
return ok;
}
//插入,在带头结点的双向链表L中的第i个位置之前插入元素e
Status ListInsert_D(DLinkList &L , int i, ElemType &e)
{
DNode *p = L; //p指向头结点
int j = 0;
while (p && j < i - 1)
{
p = p->next; //找到要插入结点的前驱结点
j++;
}
if (!p|| j > i - 1)
return error;
DNode *s = new DNode; //new一个新结点s
s->data = e; //将元素e存放在新结点的数据域
s->prior = p->prior; //将第ai-1个结点的地址存放在新结点s的prior中
p->prior->next = s; //将新结点s的地址存放在第ai-1个结点的next域中
s->next = p; //将第i个结点的地址存放在新结点s的next域中
p->prior = s; //将新结点s的地址存放在第ai个结点的prior中
return ok;
}
//删除,删除带头结点的双向链表L中的第i个元素,并用e返回
Status LsitDelete_D(DLinkList &L, int i, ElemType &e)
{
DNode *p = L; //p指向头结点
int j = 0;
while (p->next && j < i-1)
{
p = p->next;
j++;
}
if (!(p->next) || j > i - 1)
return error;
e = p->data; //e保存要删除结点的数据域
p->prior->next = p->next; //将ai+1个结点的地址存放在ai-1结点的next域中
p->next->prior = p->prior; //将ai-1结点的地址存放在ai+1结点的prior域中
delete p; //释放结点
return ok;
}
//输出
status DispList(DLinkList L)
{
DNode *p = L->next;
while (p != L) //遍历
{
cout << p->data << ' ';
p = p->next;
}
}
数据结构---双链表的基本操作代码块
于 2022-04-06 20:24:47 首次发布