双向链表的建立 增删改 打印
来源:互联网 发布:直播虚拟视频软件 编辑:程序博客网 时间:2024/06/04 19:41
/************************************************************************* > File Name: 2.c > Author: zz > Mail: zzzkkk@outlook.com > Created Time: 2017年05月21日 星期日 13时37分32秒 ************************************************************************/#include<stdio.h>#include<stdlib.h>#define T 1#define F -1typedef int Boolean;typedef int ElementType;struct Node{struct Node* prior;ElementType value;struct Node* next;};typedef struct Node* node;Boolean init(node* head);Boolean insert_tail(node head, ElementType value);Boolean insert_head(node head, ElementType value);Boolean insert_index(node head, ElementType value, int index);Boolean delete_index(node head, int index);void delete_value(node head, ElementType value);void update_value(node head, ElementType old_value, ElementType new_value);void printP(node head);void printN(node head);int length(node head);int main(){int i;node head = NULL;init(&head);for (i = 0; i < 10; i++){insert_head(head, i);}for (i = 0; i < 10; i++){insert_tail(head, i);} printP(head);printN(head);insert_index(head, 99, 0);insert_index(head, 99, 11);insert_index(head, 99, length(head)); printP(head);printN(head);delete_index(head, 0);delete_index(head, 10);delete_index(head, length(head) - 1); printP(head);printN(head);delete_value(head, 0); printP(head);printN(head);update_value(head, 8, 88); printP(head);printN(head);return 0;}Boolean init(node* head){node newnode = (node)malloc(sizeof(struct Node));if (NULL == newnode){return F;}newnode->next = newnode;newnode->prior = newnode;*head = newnode;return T;}Boolean insert_tail(node head, ElementType 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;}Boolean insert_head(node head, ElementType value){node newnode = (node)malloc(sizeof(struct Node));if (NULL == newnode){return F;}newnode->value = value;newnode->next = head->next;head->next = newnode;newnode->next->prior = newnode;newnode->prior = head;return T;}Boolean insert_index(node head, ElementType value, int index){node temp = head;int i;if (index < 0 || index > length(head)){printf("out of range\n");return F;}node newnode = (node)malloc(sizeof(struct Node));if (NULL == newnode){return F;}for (i = 0; i < index; i++){temp = temp->next;}newnode->value = value;newnode->next = temp->next;temp->next = newnode;newnode->next->prior = newnode;newnode->prior = temp;}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;}void 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;}}}void update_value(node head, ElementType old_value, ElementType new_value){node temp = head;while (temp->next != head){if (temp->next->value == old_value){temp->next->value = new_value;}temp = temp->next;}}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");}int length(node head){int count = 0;node temp = head;while (temp->next != head){temp = temp->next;count++;}return count;}
阅读全文
0 0
- 双向链表的建立 增删改 打印
- 双向链表的增删改查
- 双向链表的增删改查
- 双向链表的建立和打印
- 双向链表的增删改查操作
- 双向循环链表的创建,增删查改
- 双向链表的建立/测长/打印
- C语言实现双向链表,增删改查,排序
- 用C++实现双链表的增删查改以及双向链表的逆转
- java链表之--java双向链表的增删改查
- java链表结构(单向、双向的增删改查)
- 用java实现双向循环链表的增删改查
- 基于双向链表的增删改查和排序(C++实现)
- 链表的增删改
- Oracle建立表,及表的增删改
- Oracle建立表,及表的增删改
- (数据结构)顺序表的建立,增删查改
- 数据结构之顺序表的建立和增删改查
- Kotlin基础教程-流程控制语句
- [TED]Learning to be awesome at anything you do--Tasha Eurich
- 表格模型
- Python——RabbitMQ
- getchar() getch()
- 双向链表的建立 增删改 打印
- Unity 游戏框架搭建 (八) 减少加班利器-QLog
- java加载驱动方法
- iptables之state状态
- React Native学习笔记(2)--新闻列表实现
- 数据库的构想
- JVM
- DNS服务及BIND基础应用
- 《智能时代》——谁能站在人工智能的浪潮之巅?