// double linked list.cpp : Defines the entry point for the console application.
/*-----CODE FOR FUN---------------
-------CREATED BY Dream_Whui--
-------2015-1-20--------------------*/
#include "stdafx.h"
#include <iostream>
using namespace std;
#define ElemType char
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFEASIBLE -1
typedef struct DuLNode//定义双端链表的结构
{
ElemType data;
DuLNode *prior;
DuLNode *next;
}DuLNode,*DuLinkList;
void CreateList(DuLinkList &L, int n)//构造长度n的双端队列
{
L = (DuLinkList)malloc(sizeof(DuLNode));
L->next = NULL;
L->prior = NULL;
DuLinkList T = L;
char e;
for(int i =0; i<n; i++)
{
cin>>e;
DuLinkList s = (DuLinkList)malloc(sizeof(DuLNode));
s->data = e;
s->next = T->next;
T->next = s;
s->prior = T;
T = s;
}
}
DuLinkList GetElem_Dul(DuLinkList &L, int i)//获取第i个结点
{
DuLinkList p = L;
int j = 0;
while(p->next && j<i-1)//不加next,可以定位到表长+1位置上的结点,加next,只能到末尾
{
p = p->next;
j++;
}
if(!(p->next) || j>i-1)
return ERROR;
return p->next;
}
int ListInsert_Dul(DuLinkList &L, int i, ElemType e)//在第i个位置前面插入元素e
{
DuLinkList p = GetElem_Dul(L,i);
if(!p)
return ERROR;
DuLinkList s = (DuLinkList)malloc(sizeof(DuLNode));
if(!s)
return ERROR;
s->data = e;
s->prior = p->prior;
p->prior->next = s;
p->prior = s;
s->next = p;
return OK;
}
int ListDelete_Dul(DuLinkList &L, int i, ElemType &e)//删除第i个结点
{
DuLinkList p = GetElem_Dul(L,i);
if(!p)
return ERROR;
e = p->data;
p->prior->next = p->next;
p->next->prior = p->prior;
free(p);
return OK;
}
int main(int argc, char* argv[])
{
DuLinkList L;
CreateList(L,5);
DuLinkList T = L;
while(T->next)
{
cout<<T->next->data<<" ";
T = T->next;
}
cout<<endl;
cout<<GetElem_Dul(L,2)->data<<endl;
ListInsert_Dul(L,6,'W');
T = L;
while(T->next)
{
cout<<T->next->data<<" ";
T = T->next;
}
cout<<endl;
char e;
ListDelete_Dul(L,3,e);
T = L;
while(T->next)
{
cout<<T->next->data<<" ";
T = T->next;
}
cout<<endl;
return 0;
}数据结构--双端链表
最新推荐文章于 2025-08-02 15:05:30 发布
420

被折叠的 条评论
为什么被折叠?



