双向链表的简单实现
来源:互联网 发布:windows热键设置 编辑:程序博客网 时间:2024/06/04 19:19
一、简单说说链表概念
链表和数组在逻辑上讲都属于线性表,只是在物理上他们的存储方式不一样。怎么个不一样就不废话了,但是总结一条,这种存储方式的不同使得数组便于随机存取,而链表在删除和插入方面效率要比数组高。
二、代码实现:(操作指针是要保持头脑清醒,时刻注意NULL,你懂得,哈哈)
#include <stdio.h>#include <stdlib.h>#include <time.h>#define DATA_SIZE10typedef struct DLinkList{int data;struct DLinkList *prev;struct DLinkList *next;}DLinkList;DLinkList* create_list(int size);void print_list(DLinkList *h);void free_list(DLinkList *h);void del_data(DLinkList *h, int data);void insert_data(DLinkList *h, int elem, int data);int main(){DLinkList *head = create_list(DATA_SIZE);if (NULL == head){return -1;}puts("Init Link List:");print_list(head);printf("Input the data you want to delete:");int data;scanf("%d", &data);del_data(head, data);puts("After delete data, list is :");print_list(head);int elem;printf("Insert after whice elem:");scanf("%d", &elem);printf("Input the data you want to insert:");scanf("%d", &data);insert_data(head, elem, data);puts("After insert data, list is:");print_list(head);free_list(head);return 0;}DLinkList* create_list(int size){DLinkList *head;head = (DLinkList*)malloc(sizeof(DLinkList));if (NULL == head){return NULL;}head->data = size;head->prev = NULL;head->next = NULL;DLinkList *cur = head;int i;srand(time(NULL));for (i = 0 ; i < size ; ++i){DLinkList *elem = (DLinkList*)malloc(sizeof(DLinkList));if (NULL == elem){break;}elem->data = rand()%100;elem->prev = cur;elem->next = NULL;cur->next = elem;cur = elem;}return head;}void print_list(DLinkList *h){DLinkList *cur = h->next;while (cur){printf("%4d", cur->data);cur = cur->next;}printf("\n");}void free_list(DLinkList *h){DLinkList *cur = h;while (cur){DLinkList *tmp = cur->next;free(cur);cur = tmp;}}void del_data(DLinkList *h, int data){DLinkList *cur = h->next;while (cur){if (cur->data == data){break;}cur = cur->next;}if (NULL == cur){printf("Cannot find %d.\n", data);return;}cur->prev->next = cur->next;if (cur->next != NULL){cur->next->prev = cur->prev;}free(cur);cur = NULL;}void insert_data(DLinkList *h, int elem, int data){DLinkList *cur = h->next;while (cur){if (cur->data == elem){break;}cur = cur->next;}if (NULL == cur){printf("Cannot find %d.\n", elem);return;}DLinkList *tmp = (DLinkList*)malloc(sizeof(DLinkList));if (NULL == tmp){puts("Insert error because of malloc error");return;}tmp->data = data;tmp->next = cur->next;if (tmp->next != NULL){tmp->next->prev = tmp;}tmp->prev = cur;cur->next = tmp;}
0 0
- 双向链表的简单实现
- 双向链表的简单实现
- C++实现简单的双向链表
- java的双向链表简单实现
- 双向链表的简单实现
- 双向循环链表的简单实现
- 双向链表的简单实现
- 双向链表的简单实现丶
- 双向链表简单实现
- 一个简单的双向循环链表的实现
- 实现简单的4个结构的双向链表
- 程序一:带头结点双向链表的简单实现
- STL中双向链表的简单实现
- 简单列表的实现(基于双向链表)
- 详谈双向链表的实现与简单操作
- [java数据结构]--java双向链表LinkedList的简单实现
- 简单易懂的C语言实现双向链表代码
- 简单实现双向循环链表
- 数据结构c++ 随堂笔记4
- jsoncpp 扩展
- MQ直连 并通过线程池ExecutorService发送消息
- iOS疯狂详解之Svn基本命令
- R: 矩阵运算及常用函数 V - plyr Part I
- 双向链表的简单实现
- 使用Xcode自带的单元测试
- 如何让Canvas画笔填充满整个浏览器屏幕
- hadoop写mongodb问题记录(备忘)
- 用nmon监控Linux系统资源
- FZU2107:Hua Rong Dao(DFS)
- 改善C#程序的建议4:C#中标准Dispose模式的实现
- 结构体——使用结构体实现求平均成绩
- Duilib 下关于Gif的使用