双向循环链表简单的插入、删除、修改以及查找功能的实现
来源:互联网 发布:呼叫中心系统源码 编辑:程序博客网 时间:2024/05/22 07:46
```#include <stdio.h>#include <stdlib.h>#define T 1#define F 0typedef int ElementType;typedef int Boolean;typedef struct node* Node;struct node //定义双向的结构体{ struct node* prior; ElementType value; struct node* next;};Boolean make(Node *head);//创建一个新的结点Boolean init(Node *head);//创建一个双向循环的结点,并使之成为头结点Boolean insert_tail(Node head, ElementType value);//实现尾插入Boolean insert_index(Node head, int index, ElementType value);//实现按位置插入Boolean insert_head(Node head, ElementType value);//实现头插入Boolean delete_index(Node head, int index);//按位置删除Boolean delete_value(Node head, ElementType value);//按值删除Boolean update_index(Node head, int index, ElementType value);//按位置替换Boolean update_value(Node head, ElementType old_value, ElementType new_value);//按值替换Boolean query_index(Node head, int index);//查找所给位置的值Boolean query_value(Node head, ElementType value);//查找所给值的位置int length(Node head);//计算链表长度void print_p(Node head);//前序遍历打印void print_n(Node head);//后序遍历打印int main(){ Node head; make(&head); init(&head); ElementType i; for (i = 0; i < 10; i++) //按头插入0~9 { insert_head(head, i); } for (i = 0; i < 10; i++) //按尾插入0~9 { insert_tail(head, i); } insert_index(head, 3, 99); //在3位置插入99 insert_index(head, 0, 99); //在0位置插入99 insert_index(head, length(head), 99); //在链表最后位置插入99 print_p(head); //前序遍历打印 print_n(head); //后序遍历打印 delete_index(head, 4); //删除位置4 print_p(head); delete_value(head, 0); //删除0值 print_p(head); update_index(head, 0, 100); //将0位置的数改为100 update_index(head, length(head) - 1, 100); //将最后一个数改为100 print_p(head); update_value(head, 100, 101); //将100改为101 print_p(head); print_n(head); query_index(head, 15); //查找第15位的值 query_value(head, 101); //查找值为101的位置 printf("%d\n", length(head)); //打印链表的长度 return 0;} //以下是实现各功能的调用函数的程序Boolean query_value(Node head, ElementType value){ Node temp = head; int index = 0; while (temp->next != head) { if (value == temp->next->value) { printf("%d is on %d\n", value, index); } index++; temp = temp->next; } return T;}Boolean query_index(Node head, int index){ if (index < 0 || index >= length(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i < index; i++) { head = head->next; } printf("%d is %d\n", index, head->next->value); return T;}Boolean update_value(Node head, ElementType old_value, ElementType new_value){ Node temp = head; while (temp->next != head) { if (old_value == temp->next->value) { temp->next->value = new_value; } temp = temp->next; } return T;}Boolean update_index(Node head, int index, ElementType value){ if (index < 0 || index >= length(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i < index; i++) { head = head->next; } head->next->value = value; return T;}Boolean delete_value(Node head, ElementType value){ Node temp = head; while (temp->next != head) { if (value == temp->next->value) { Node temp2 = temp->next; temp->next = temp->next->next; temp->next->prior = temp; free(temp2); } else { temp = temp->next; } } return T;}Boolean delete_index(Node head, int index){ if (index < 0 || index >= length(head)) { printf("out of range\n"); return F; } int i; for (i = 0; i < index; i++) { head = head->next; } Node temp = head->next; head->next = head->next->next; head->next->prior = head; free(temp); return T;}int length(Node head){ int count = 0; Node temp = head; while (temp->next != head) { count++; temp = temp->next; } return count; return T;}Boolean insert_index(Node head, int index, ElementType value){ if (index < 0 || index > length(head)) { printf("out of range\n"); return F; } Node newnode; make(&newnode); newnode->value = value; int i; for (i = 0; i < index; i++) { head = head->next; } newnode->next = head->next; head->next = newnode; newnode->prior = head; newnode->next->prior = newnode; return T; }Boolean insert_head(Node head, ElementType value){ Node newnode; make(&newnode); newnode->value = value; newnode->next = head->next; head->next = newnode; newnode->prior = head; newnode->next->prior = newnode; return T;}void print_p(Node head){ Node temp = head; while (temp->prior != head) { printf("%d ", temp->prior->value); temp = temp->prior; } printf("\n");}void print_n(Node head){ Node temp = head; while (temp->next != head) { printf("%d ", temp->next->value); temp = temp->next; } printf("\n");}Boolean insert_tail(Node head, ElementType value){ Node newnode; make(&newnode); newnode->value = value; head->prior->next = newnode; newnode->next = head; newnode->prior = head->prior; head->prior = newnode; return T;}Boolean init(Node *head){ Node newnode; make(&newnode); newnode->next = newnode; newnode->prior = newnode; *head = newnode; return T;}Boolean make(Node *head){ Node newnode = (Node)malloc(sizeof(struct node)); if (NULL == newnode) { return F; } *head = newnode; return T;}
函数在Linux下的实现
阅读全文
0 0
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- 双向循环链表的创建修改插入删除操作
- 双向循环链表的插入删除
- C++实现双向链表的创建,插入,修改,删除
- 汇编实现的简单的通讯录系统,有插入,修改,删除,打印,查找功能
- 双向链表的插入以及删除
- 利用模板类编写一个程序,实现双向链表的插入、删除、查找、显示的功能。
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- 双向循环链表的插入和删除
- 双向循环链表的创建,插入与删除。
- 双向循环链表的创建,插入,删除操作
- 带头双向循环链表的插入和删除
- C语言---双向链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- 双向循环链表的建立、查找、添加、删除
- 数据结构 P36-37 算法实现 双向循环链表的插入与删除
- 双向循环链表的简单实现
- sql语句之group_concat函数
- Hive学习指南(四)
- C#定时执行某一个功能二(解压并读取xml到postgresql)
- linux 远程登录执行命令
- ANdroid的崩溃总结
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- opencv(21)---轮廓属性特征以及应用之凹包
- liunx centos 搭建配置apache2.4+php5.6.30
- error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- IPC通信
- 解决the virtual device got no ip address情况之一
- 创建支持ssh的docker镜像
- [UnityShader]渲染队列、ZWrite和ZTest
- java实现图片与base64字符串之间的转换