双向链表的功能实现:初始化,插入,按位置插入,按位置删除,按值删除,遍历打印等

#include<stdio.h>
#include <stdlib.h>
#define F -1
typedef struct Node* node;
struct Node
{
node prior;
node next;
int value;
};
int init(node *head);                                          //初始化
int insert_tail(node head, int element);             // 尾插法
void printh(node head);                                    // 从头开始遍历打印
void printt(node head);                                     // 从尾开始遍历打印
int insert_head(node head, int element);          // 头插法
int insert_index(node head, int element, int index);  // 按位置插入
int length(node head);                                              // 计算链表长度
int delete(node head, int element);                            // 删除结点
main()                     
{
int i;
node head;
init(&head);
for (i = 0; i < 10; i++)
{
insert_tail(head, i);
}
printh(head);
printt(head);
for (i = 0; i < 10; i++)
{
insert_head(head, i);
}
    printh(head);
printt(head);
insert_index(head, 99, 5);
    printh(head);
printt(head);
delete(head, 1);
    printh(head);
printt(head);
}
int delete(node head, int element)
{
node t;
node temp = head;
while (temp->next != head)
{
if (temp->next->value == element)
{
t = temp->next->next;
t->prior = temp;
free(temp->next);
            temp->next = t;
}
else 
{
temp = temp->next;
}
}
return 0;
}
int length(node head)
{
node temp = head;
int count = 0;
while (temp->next != head)
{
count++;
temp = temp->next;
}
return count;
}
int insert_index(node head, int element, int index)
{
node temp = head;
node newnode = (node)malloc(sizeof(struct Node));
int i;
if (index < 0 || index > length(head))
printf("out of range");
for (i = 0; i < index; i++)
{
temp = temp->next;
}
newnode->value = element;
newnode->next = temp->next;
newnode->prior = temp;
temp->next->prior = newnode;
temp->next = newnode;
return 0;
}
int insert_head(node head, int element)
{
node newnode = (node)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = element;
newnode->prior = head;
newnode->next = head->next;
head->next->prior = newnode;
head->next = newnode;
return 0;
}
void printh(node head)
{
node temp = head;
while (temp->prior != head)
{
printf("%d  ", temp->prior->value);
temp = temp->prior;
}
printf("\n");
}
void printt(node head)
{
node temp = head;
while (temp->next != head)
{
printf("%d  ", temp->next->value);
temp = temp->next;
}
printf("\n");
}
int insert_tail(node head, int element)
{
node newnode = (node)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = element;
newnode->next = head;
head->prior->next = newnode;
newnode->prior = head->prior;
head->prior = newnode;
return 0;
}
int init(node *head)
{
node newnode = (node)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = 0;
newnode->prior = newnode;
newnode->next = newnode;
*head = newnode;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值