#include<stdio.h>
#include<stdlib.h>
typedef struct DNode
{
int data;
struct DNode *prior,*next;
} DNode,*DLinklist;
void Init(DLinklist &L)
{
L=(DLinklist)malloc(sizeof(DNode));
L->next=NULL;
L->prior=NULL;
}
void insert_head(DLinklist &L) //头插法
{
int x=0;
printf("请输入x:\n");
scanf("%d",&x);
DLinklist s;
printf("ok1");
while(x!=999)
{
s=(DLinklist)malloc(sizeof(DNode));
s->data=x;
if(L->next==NULL)
{
L->next=s;
s->prior=L;
}
else
{
s->next=L->next;
L->next->prior=s;
L->next=s;
s->prior=L;
}
printf("ok2");
printf("请输入x:\n");
scanf("%d",&x);
}
}
void insert_end(DNode *&L) //尾插法
{
int x=0;
printf("请输入x:\n");
scanf("%d",&x);
DLinklist s,q=L;
while(q->next!=NULL)
{
q=q->next;
}
while(x!=999)
{
s=(DLinklist)malloc(sizeof(DNode));
s->data=x;
s->next=NULL;
q->next=s;
s->prior=q;
q=s;
printf("请输入x:\n");
scanf("%d",&x);
}
}
void print(DLinklist L) //输出
{
DNode *p=L->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
bool insert(DNode *&L,int e)//在第e个位置插入节点 (前插法)
{
int x=0,i=1;
printf("请输入要插入的值:\n");
scanf("%d",&x);
DLinklist s,p=L->next,q;
if (p==NULL)
return false;
else
{
while(p!=NULL)
{
if(p->next==NULL)
{
q=p;
}//得到链表中最后一个节点
if(i==e)
{
s=(DLinklist)malloc(sizeof(DNode));
s->data=x;
s->next=p;
s->prior=p->prior;
p->prior->next=s;
p->prior=s;
return true;
}
else
{
p=p->next;
i++;
}
}
}
i=i;
printf("i:%d\n",i);
if(i==e)
{
p=q;
s=(DLinklist)malloc(sizeof(DNode));
s->data=x;
p->next=s;
s->prior=p;
s->next=NULL;
return true;
}
return false;
}
bool deletelist_e(DNode *&L,int e)//删除值为e的结点
{
DLinklist p=L->next;
while(p!=NULL)
{
if(p->data==e)
{
p->prior->next=p->next;
free(p);
return true;
}
else
{
p=p->next;
}
}
return false;
}
bool deletelist_n(DNode *&L,int e)//删除序号为e的结点
{
int i=1;
DLinklist p=L->next;
while(p!=NULL)
{
if(i==e)
{
p->prior->next=p->next;
free(p);
return true;
}
else
{
p=p->next;
i++;
}
}
return false;
}
int main()
{
DNode *L1,*L2;
Init(L1);
Init(L2);
insert_head(L1);
print(L1);
printf("++++++\n");
insert_end(L2);
print(L2);
printf("========\n");
if (insert(L1,4)==true)
{
printf("插入successed!\n");
}
else
printf("插入failed!\n");
print(L1);
printf("------\n");
if(deletelist_e(L1,3))
{
printf("删除successed!\n");
}
else
printf("删除failed!\n");
print(L1);
printf("**********\n");
if(deletelist_e(L2,3))
{
printf("删除successed!\n");
}
else
printf("删除failed!\n");
print(L2);
return 0;
}
双链表(王道讲解部分)----7/15
最新推荐文章于 2024-04-29 20:11:44 发布