双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
来源:互联网 发布:js window.url 编辑:程序博客网 时间:2024/05/16 01:51
删除双向链表中的最后一个结点需单独对待
doublyLinkedList.h
#include "iostream"using namespace std;typedef struct DuLNode {int data;struct DuLNode *prior;struct DuLNode *next;}DuLNode, *DuLinkedList;//创建链表bool createDuLinkedList(DuLinkedList &L, int n) {if (n < 1){cout << "您输入的长度不合法!" << endl;exit(EXIT_FAILURE);}L = (DuLinkedList)malloc(sizeof(DuLNode)); //向系统申请分配size个字节的内存空间,返回类型是void*类型if (!L){cout << "内存分配失败!" << endl;exit(EXIT_FAILURE);return false;}L->next = NULL;DuLinkedList p, q;p = L;for (int i = 0; i < n; i++){q = (DuLinkedList)malloc(sizeof(DuLNode));if (!q){cout << "内存分配失败!" << endl;exit(OVERFLOW);return false;}cin >> q->data;q->next = NULL;q->prior = p;p->next = q;p = q;}return true;}//输出链表void printDuLinkedList(DuLinkedList &L) {DuLinkedList p;p = L->next;while (p != NULL) //双向链表为空的时候{cout << p->data << " ";p = p->next;}cout << endl;}//获取双向链表的长度int getDuLinkedListLength(DuLinkedList &L) {int j = 0;DuLinkedList p;p = L->next;while (p){j++;p = p->next;}return j;}//在第i个元素之前插入元素bool insertElem(DuLinkedList &L, int i, int n) {DuLinkedList p, q;q = (DuLinkedList)malloc(sizeof(DuLNode));if (!q){cout << "内存分配失败!" << endl;exit(EXIT_FAILURE);}if (i > getDuLinkedListLength(L)||i<1){cout << "输入不合法" << endl;exit(EXIT_FAILURE);}p = L;for (int j = 0; j < i; j++){p = p->next; //定位到第i个元素}q->data = n;q->prior = p->prior;p->prior->next = q;q->next = p;p->prior = q;return true;}//删除第i个元素bool deleteDuLinkedList(DuLinkedList &L, int i) {DuLinkedList p;if (i > getDuLinkedListLength(L) || i < 1){cout << "输入不合法!" << endl;exit(EXIT_FAILURE);}p = L;int j = 0;while ((p->next != NULL) && (j < i)){p = p->next;j++; //定位到第i个元素}if (p->next == NULL) //因为最后一个节点的p->next==NULL;;{p->prior->next = NULL;}else{p->next->prior = p->prior;p->prior->next = p->next;}free(p);return true;}//查询第i个元素的值,并返回int getElem(DuLinkedList &L, int i) {DuLinkedList p;if (i > getDuLinkedListLength(L)||i<1){cout << "输入不合法" << endl;}p = L;for (int j = 0; j < i; j++){p = p->next;}return p->data;}//查询链表中是否含有e,并返回位序int searchElem(DuLinkedList &L, int e) {DuLinkedList p;p = L->next;int i = 1;while (p && (p->data != e)){p = p->next;i++;}if (!p){cout << "链表中无该值!" << endl;return true;}else{return i;}}//清空双向链表bool clearList(DuLinkedList &L) {if (L->next = NULL){return true;}DuLinkedList p, q;p = q = L->next;while (p!=NULL){p = p->next;free(q);q = p;}L->next = L->prior = NULL;return true;}//销毁双向链表bool destoryList(DuLinkedList &L) {if (L == NULL){return true;}DuLinkedList p, q;p = q = L->next;while (p){p = q->next;free(q);q = p;}free(L);return true;}
main.cpp
#include "stdafx.h"#include "doublyLinkedList.h"int main(){DuLinkedList list1;int length, i, elem;cout << "请输入要创建的链表长度:";cin >> length;createDuLinkedList(list1,length);cout << "打印链表:";printDuLinkedList(list1);cout << "请输入要插入元素的位置:";cin >> i;cout << "请输入要插入的元素的大小:";cin >> elem;insertElem(list1, i, elem);cout << "打印链表:";printDuLinkedList(list1);cout << "请输入要删除的元素位置:";cin >> i;deleteDuLinkedList(list1, i);cout << "打印链表:";printDuLinkedList(list1);cout << "请输入要查找的元素的位置:";cin >> i;cout << getElem(list1, i) << endl;cout << "请输入要查找的元素的值:";cin >> elem;cout << searchElem(list1,elem) << endl;cout << "清空链表"<<endl;cout << "打印链表:";printDuLinkedList(list1);system("pause");return 0;}
阅读全文
0 0
- 双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- 双向链表(创建、求长、打印、删除、插入)
- 实现双向链表的创建、测长、打印、插入、删除
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 双向循环链表基本操作(初始化,插入,删除,清空,销毁,访问前驱,后继等)
- 双向循环链表基本操作(初始化,插入,删除,清空,销毁,访问前驱,后继等)
- 链式栈的初始化,判空,进栈,出栈,求长,求顶,打印,清空和销毁
- 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- 双链表的创建、遍历、测长、插入、删除、销毁
- C语言链表的创建、插入、查找、删除、清空操作
- 双向链表的创建/插入/删除
- 双向非循环递增链表——插入,删除,清空
- Android布局文件中include标签的使用
- Swap的几种方法(Java版本)
- 严蔚敏版_数据结构_第一章_习题
- 欢迎使用CSDN-markdown编辑器
- opencv程序调试问题及解决方案1
- 双向链表的创建、打印、求长、插入、删除、查值、清空、销毁
- 正则化方法:L1和L2 regularization、数据集扩增、dropout
- Makefile 的核心内容
- 读懂diff的输出
- Hibernate----对象的三种状态
- 用于并行计算的多线程数据结构,第 2 部分: 设计不使用互斥锁的并发数据结构
- 网传的南方某科技大学最新研究成果
- 大数据技术入门
- [leetcode]554. Brick Wall