顺序表的双向链表算法
不知道怎样初始化节点。。。。。
#include<stdio.h>
#include<stdlib.h>
typedef struct A
{
int data;
struct A* pro, * next;
}A,*a;
bool chushihua(a& aa)
{
aa = (A*)malloc(sizeof(A));//表示这是个节点,但是A*等价于a
if (aa == NULL) return false;
aa->pro = NULL;
aa->next = NULL;
return true;
}
bool ynkong(a& aa)
{
if (aa->next == NULL) return true;
else return false;
}
bool charu(A* p, A* s)//在p节点之后插入s节点
{
if (p == NULL || s == NULL) return false;
s->next = p->next;
if(p->next!=NULL) p->next->pro=s;
s->pro = p;
p->next = s;
return true;
}
bool shanchu(A* i)
{
if (i == NULL) return false;
a q = i->next;
if (q == NULL) return false;
i->next = q->next;
if (q->next != NULL) q->next->pro = i;
free(q);
return true;
}
bool chuangjian(a& aa)
{
a p = aa;
for (int i = 1; i <=5; i++)
{
a b = (A*)malloc(sizeof(A));
b->data = i;
b->next = p->next;
b->pro = p;
p->next = b;
p = p->next;
}
return true;
}
int main()
{
a aa;//表示这是个链表
bool chushi = chushihua(aa);
if (chushi == false) printf("创建双链表失败");
else printf("创建双链表成功\n");
bool pankong = ynkong(aa);
if (pankong = true) printf("链表为空\n");
else printf("链表不为空\n");
bool chuang=chuangjian(aa);
if (chuangjian)
{
while (aa->next != NULL)
{
aa = aa->next;
printf("%d ",aa->data);
printf("-%x -", aa->pro);
printf("-%x -", aa->next);
printf("\n");
}
}
A* P;//就是这块
A* PP;//就是这块
bool cha = charu(aa, p,pp);
if(cha)
{
printf("插入成功\n");
while (aa->next != NULL)
{
aa = aa->next;
printf("%d ", aa->data);
printf("-%x -", aa->pro);
printf("-%x -", aa->next);
printf("\n");
}
}
}