关于 双向循环链表 的一些基础程序
2017-05-21 19:53
190 查看
#include <stdio.h>
#include <stdlib.h>
#define T 1
#define F -1
typedef int el;
typedef int bo;
typedef struct Node* node;
struct Node
{
node prior;
el value;
node next;
};
bo init(node *head);
bo insert_tail(node head, el value);
bo insert_head(node head, el value);
bo insert_index(node head, int index, el value);
bo length(node head);
bo delete_index(node head, int index);
void delete_value(node head, el value);
bo find_index(node head, int index);
void find_value(node head, el value);
bo update_index(node head, int index, el value);
void update_value(node head, el value, int x);
void printP(node head);
void printN(node head);
int main()
{
node head = NULL;
int i, ret;
init(&head);
for(i = 0; i < 10; i++)
{
insert_head(head, i);
}
printN(head);
printP(head);
for(i = 0; i < 10; i++)
{
insert_tail(head, i);
}
printN(head);
printP(head);
ret = length(head);
printf("length = %d\n", ret);
insert_index(head, 20, 100);
printN(head);
printP(head);
delete_index(head, 20);
printN(head);
printP(head);
delete_value(head, 0);
printN(head);
printP(head);
find_index(head, 0);
find_value(head, 5);
update_index(head, 0, 200);
printN(head);
printP(head);
update_value(head, 9, 300);
printN(head);
printP(head);
return 0;
}
bo update_index(node head, int index, el value)
{
if(index < 0 || index > length(head))
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
head->next->value = value;
return T;
}
void update_value(node head, el value, int x)
{
int i;
for(i = 0; i < length(head); i++)
{
if(head->next->value == value)
{
head->next->value = x;
}
head = head->next;
}
}
bo find_index(node head, int index)
{
if(index < 0 || index > length(head))
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
printf("the number is : %d\n", head->next->value);
return T;
}
void find_value(node head, el value)
{
int i;
for(i = 0; i < length(head); i++)
{
if(head->next->value == value)
{
printf("the site of the number is %d\n", i);
}
head = head->next;
}
}
bo delete_index(node head, int index)
{
int i;
if(index < 0 || index > length(head))
{
return F;
}
for(i = 0; i < index; i++)
{
head = head->next;
}
node temp = head->next->next;
free(head->next);
head->next = temp;
temp->prior = head;
return T;
}
void delete_value(node head, el value)
{
node temp = head;
node sen;
while(temp->next != head)
{
if(temp->next->value == value)
{
sen = temp->next->next;
free(temp->next);
temp->next = sen;
sen->prior = temp;
}
else
{
temp = temp->next;
}
}
}
bo length(node head)
{
node temp = head;
int count = 0;
while(temp->next != head)
{
count++;
temp = temp->next;
}
return count;
}
bo insert_index(node head, int index, el value)
{
if(index < 0 || index > length(head))
{
return F;
}
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
newnode->value = value;
newnode->prior = head;
head->next->prior = newnode;
newnode->next = head->next;
head->next = newnode;
return T;
}
bo init(node *head)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->prior = newnode;
newnode->next = newnode;
*head = newnode;
}
bo insert_head(node head, el value)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->value = value;
head->next->prior = newnode;
newnode->prior = head;
newnode->next = head->next;
head->next = newnode;
return T;
}
bo insert_tail(node head, el value)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->value = value;
head->prior->next = newnode;
newnode->next = head;
newnode->prior = head->prior;
head->prior = newnode;
return T;
}
void printP(node head)
{
node temp = head;
while(temp->prior != head)
{
printf("%d ", temp->prior->value);
temp = temp->prior;
}
printf("\n");
}
void printN(node head)
{
node temp = head;
while(temp->next != head)
{
printf("%d ", temp->next->value);
temp = temp->next;
}
printf("\n");
}
#include <stdlib.h>
#define T 1
#define F -1
typedef int el;
typedef int bo;
typedef struct Node* node;
struct Node
{
node prior;
el value;
node next;
};
bo init(node *head);
bo insert_tail(node head, el value);
bo insert_head(node head, el value);
bo insert_index(node head, int index, el value);
bo length(node head);
bo delete_index(node head, int index);
void delete_value(node head, el value);
bo find_index(node head, int index);
void find_value(node head, el value);
bo update_index(node head, int index, el value);
void update_value(node head, el value, int x);
void printP(node head);
void printN(node head);
int main()
{
node head = NULL;
int i, ret;
init(&head);
for(i = 0; i < 10; i++)
{
insert_head(head, i);
}
printN(head);
printP(head);
for(i = 0; i < 10; i++)
{
insert_tail(head, i);
}
printN(head);
printP(head);
ret = length(head);
printf("length = %d\n", ret);
insert_index(head, 20, 100);
printN(head);
printP(head);
delete_index(head, 20);
printN(head);
printP(head);
delete_value(head, 0);
printN(head);
printP(head);
find_index(head, 0);
find_value(head, 5);
update_index(head, 0, 200);
printN(head);
printP(head);
update_value(head, 9, 300);
printN(head);
printP(head);
return 0;
}
bo update_index(node head, int index, el value)
{
if(index < 0 || index > length(head))
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
head->next->value = value;
return T;
}
void update_value(node head, el value, int x)
{
int i;
for(i = 0; i < length(head); i++)
{
if(head->next->value == value)
{
head->next->value = x;
}
head = head->next;
}
}
bo find_index(node head, int index)
{
if(index < 0 || index > length(head))
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
printf("the number is : %d\n", head->next->value);
return T;
}
void find_value(node head, el value)
{
int i;
for(i = 0; i < length(head); i++)
{
if(head->next->value == value)
{
printf("the site of the number is %d\n", i);
}
head = head->next;
}
}
bo delete_index(node head, int index)
{
int i;
if(index < 0 || index > length(head))
{
return F;
}
for(i = 0; i < index; i++)
{
head = head->next;
}
node temp = head->next->next;
free(head->next);
head->next = temp;
temp->prior = head;
return T;
}
void delete_value(node head, el value)
{
node temp = head;
node sen;
while(temp->next != head)
{
if(temp->next->value == value)
{
sen = temp->next->next;
free(temp->next);
temp->next = sen;
sen->prior = temp;
}
else
{
temp = temp->next;
}
}
}
bo length(node head)
{
node temp = head;
int count = 0;
while(temp->next != head)
{
count++;
temp = temp->next;
}
return count;
}
bo insert_index(node head, int index, el value)
{
if(index < 0 || index > length(head))
{
return F;
}
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
int i;
for(i = 0; i < index; i++)
{
head = head->next;
}
newnode->value = value;
newnode->prior = head;
head->next->prior = newnode;
newnode->next = head->next;
head->next = newnode;
return T;
}
bo init(node *head)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->prior = newnode;
newnode->next = newnode;
*head = newnode;
}
bo insert_head(node head, el value)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->value = value;
head->next->prior = newnode;
newnode->prior = head;
newnode->next = head->next;
head->next = newnode;
return T;
}
bo insert_tail(node head, el value)
{
node newnode = (node)malloc(sizeof(struct Node));
if(NULL == newnode)
{
return F;
}
newnode->value = value;
head->prior->next = newnode;
newnode->next = head;
newnode->prior = head->prior;
head->prior = newnode;
return T;
}
void printP(node head)
{
node temp = head;
while(temp->prior != head)
{
printf("%d ", temp->prior->value);
temp = temp->prior;
}
printf("\n");
}
void printN(node head)
{
node temp = head;
while(temp->next != head)
{
printf("%d ", temp->next->value);
temp = temp->next;
}
printf("\n");
}
相关文章推荐
- 双向循环链表---基础操作
- 数据结构基础(12) --双向循环链表的设计与实现
- 关于程序性能优化基础的一些个人总结
- 关于 单链表 的一些程序
- 关于双向循环链表基本操作
- 关于程序性能优化基础的一些个人总结
- 双向循环链表插入算法的C++程序实现
- 2016年12月23日学习总结----双向循环链表操作程序(头插、尾插、中间插入、删除)
- 数据结构基础(12) --双向循环链表的设计与实现
- 关于可控大小的双向循环链表
- 关于写个内核模块打印进程链表的一些信息的程序
- 一些Linux上编的基础C程序(一)循环结构
- C语言基础—数据结构之单向循环链表和双向循环链表
- 数据结构基础(12) --双向循环链表的设计与实现
- 关于程序性能优化基础的一些个人总结
- 关于循环双向链表
- 数据结构基础(12) --双向循环链表的设计与实现
- 数据结构基础(12) --双向循环链表的设计与实现
- 双向循环链表删除算法的C++程序实现
- 关于Hibernate的一些基础问题