DLinkList(双链表)

来源:互联网 发布:土建材料计划软件 编辑:程序博客网 时间:2024/06/05 17:11
#include<stdio.h>
typedef int Datatype;
typedef struct link_node {
Datatype info;
struct link_node *llink;
struct link_node *rlink;
}node;


node *init(node *head)
{
return NULL;
}


node *find_last(node *head)
{
node *pre = init(&pre), *p = head;
while (p)
{
pre = p;
p = p->rlink;
}
return pre;
}


void display(node *head)
{
if (!head)
printf("链表为空,无法进行输出!\n");
else
{
node *p = head;
while (p)
{
printf("%5d", p->info);
p = p->rlink;
}
}
}


void display_1(node *head)
{
if (!head)
printf("链表为空,无法进行输出!\n");
else
{
node *L;
L = find_last(head);
while (L)
{
printf("%5d", L->info);
L = L->llink;
}
}
}


node *find(node *head, int i)
{
node *p = head;
int j = 2;;
if (i == 1)
return head;
else
{
p = p->rlink;
while (p&&i != j)
{
p = p->rlink;
++j;
}
if (!p&&i != j)
{
printf("没有找到第%d个结点\n", i);
return NULL;
}
else
if (i == j)
return p;
}
}


node *insert(node *head, Datatype x, int i)
{
node *p;
node *q = (node *)malloc(sizeof(node));
q->info = x;
q->llink = NULL;
q->rlink = NULL;
if (i == 0)
{
q->rlink = head;
head = q;
}
else
{
p = find(head, i);
if (p)
{
q->rlink = p->rlink;
q->llink = p;
p->rlink = q;
q->rlink->llink = q;
}
}
return head;
}


node *build(node *head, Datatype x)
{
node *p, *q;
p = (node *)malloc(sizeof(node));
p->info = x;
p->llink = NULL;
p->rlink = NULL;
if (head == NULL)
head = p;
else
{
q = find_last(head);
q->rlink = p;
p->llink = q;
}
return head;
}


node *dele(node *head, Datatype x)
{
node *p = head, *pre = init(&pre);
if (!p)
printf("链表为空,无法进行删除!\n");
else
{
while (p&&p->info != x)
{
pre = p;
p = p->rlink;
}
if (!p&&p->info != x)
printf("没有找到要删除的值!\n");
else
if (p->info == x)
{
pre->rlink = p->rlink;
p->rlink->llink = pre;
}
}
return head;
}


void main()
{
node *head;
head = init(&head);
int i;
node *f;
for (i = 0; i<10; i++)
head = build(head, i * 2);
display(head);
putchar('\n');
f = find(head, 8);
printf("第8个结点的值为:%d\n", f->info);
head = insert(head, 666, 8);
printf("在第8个结点后插入一个值后链表为:");
display(head);
putchar('\n');
head = dele(head, 8);
printf("删除值为8的结点后链表为:");
display(head);
putchar('\n');
printf("逆序输出链表各结点的值:");
display_1(head);
putchar('\n');
}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑网页默认了怎么办 淘宝商家停止服务怎么办? 淘宝商家停止了怎么办 做淘宝不会美工怎么办 做客服打字慢怎么办 淘宝客服学不会怎么办 代购不给退货怎么办 淘宝不能发照片怎么办 兼职刷手被骗怎么办 淘宝店商品被降权怎么办 淘宝宝贝被降权了怎么办 淘宝违规降权怎么办 淘宝商品降权怎么办 公司不想要了怎么办 派派被客服禁言怎么办 淘宝收款不发货怎么办 新品标签没了怎么办 商家签收不退款怎么办 微信号存在风险怎么办 建网站不会管理怎么办 淘宝代销厂家发错货卖家怎么办 来分期退货退款怎么办 淘宝售后不退货怎么办 手机淘宝不退货怎么办 淘宝店不肯退款怎么办 退货快递丢件怎么办 淘宝客服不退款怎么办 淘宝被拉进黑名单怎么办 被买家举报假货怎么办 淘宝店售假3次怎么办 支付宝被骗200怎么办 淘宝被同行投诉怎么办 淘宝同行恶意投诉怎么办 淘宝被恶意举报怎么办 买到假的gucci包怎么办 淘宝买家退假货怎么办 淘宝产品被投诉怎么办 淘宝店铺被盗了怎么办 淘宝卖家不给解决问题怎么办 淘宝直通车亏钱怎么办 买家一直不评论怎么办