c/c++ 双向链表 创建 插入 删除
来源:互联网 发布:mac自带快捷键怎么设置 编辑:程序博客网 时间:2024/06/07 18:47
同单链表的操作方法类似,不过在结点中加入了一个指向结点前驱的指针。
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>using namespace std;typedef struct student{ int data; struct student *next; struct student *pre;}dnode;dnode* create();dnode* delNode(dnode* head, int num);dnode* instNode(dnode* head, int num);void searchmid(dnode* head,dnode* mid);void print(dnode* head);dnode* create(){ dnode *head; head = (dnode*)malloc(sizeof(dnode)); head->data=0; head->pre=nullptr; head->next=nullptr; int num=1; while(num!=0) { cout << "Please input the data: "; cin >> num; instNode(head, num); } cout << "head data: " << head->data << endl; return head;}dnode* delNode(dnode* head, int num){ dnode* p1; p1=head; while(num!=p1->data && p1->next!=nullptr) { p1=p1->next; } if(num == p1->data) { if(p1 == head) { head=head->next; head->pre=nullptr; free(p1); } else if(p1->next == nullptr) { p1=p1->pre; p1->next=nullptr; free(p1); } else { p1->next->pre=p1->pre; p1->pre->next=p1->next; } } else { cout << num << " could not found!!!" << endl; } return head;}dnode* instNode(dnode* head, int num){ dnode *p0,*p1; p1=head; p0=(dnode*)malloc(sizeof(dnode)); p0->data=num; while((p0->data > p1->data) && (p1->next != nullptr)) { p1=p1->next; } if(p0->data <= p1->data) { if(p1==head) { p0->next=p1; p1->pre=p0; head=p0; } else { p1->pre->next=p0; p0->next=p1; p0->pre=p1->pre; p1->pre=p0; } } else { p1->next=p0; p0->pre=p1; p0->next=nullptr; } return head;}void searchmid(dnode* head,dnode* mid){ dnode* temp = head; while(head->next->next != nullptr) { head = head->next->next; temp = head->next; mid = temp; }}void print(dnode* head){ while(head->next!=nullptr) { cout << head->data << endl; head=head->next; } cout << head->data << endl;}int main(){ dnode* head; int del_num,inst_num; head = create(); print(head); cout << "Input number would be deleted: "; cin >> del_num; head = delNode(head,del_num); print(head); cout << "Insert number would be inserted: "; cin >> inst_num; head = instNode(head,inst_num); print(head); return 0;}
阅读全文
1 0
- c/c++ 双向链表 创建 插入 删除
- C语言实现双向链表删除、插入、双向输出
- 双向链表 C语言 (创建,插入,删除,判空,返回链表长度)
- 用c语言完成一个双向链表的创建,插入,删除
- C/C++ 知识点回顾 双向链表的创建、插入和删除
- C语言实现双向链表插入,删除
- C语言---双向链表的插入、删除、查找操作
- C语言---双向链表的插入、删除、查找操作
- 双向链表的创建/插入/删除
- 双向链表创建、插入、删除
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作
- C语言实现双向链表删除节点、插入节点、双向输出等操作
- c语言链表的创建、插入、删除、排序
- 如何使用c语言实现双向链表的插入删除操作
- 双向循环链表的创建,插入与删除。
- 双向链表(创建、求长、打印、删除、插入)
- python变量类型格式化,结果补全值
- 【leetcode】18.4sum 总结
- .gitignore
- RecyclerView使用介绍
- OpenCv 中Otsu 算法实现
- c/c++ 双向链表 创建 插入 删除
- MySQL中的变量定义及区别
- 界面加载动画(一帧一帧的图片组成的动画)
- MD5 encoding
- 从一个页面关闭后台,再重新回到前台的处理
- 详述银行卡支付方式
- 手机自动访问generate_204
- Java开发异常处理
- 代码干货|Python API快餐教程(1)