双向循环链表(创建·插入·删除·遍历)
来源:互联网 发布:判断在数组里面 php 编辑:程序博客网 时间:2024/05/22 07:58
author:chen ming dong
#include<stdio.h>#include<stdlib.h>typedef struct list{ int a; struct list *next; struct list *prior;}str;int n;str * creat(str *head){ str *p,*pt; printf("要输入几个数据?\t"); scanf("%d",&n); int m=n; printf("\n请输入\n"); scanf("%d",&head->a); p=pt=head; while(m>1) { m--; p=(str *)malloc(sizeof(str)); scanf("%d",&p->a); p->prior=pt; pt->next=p; pt=p; } head->prior=p; p->next=head; return head; } //遍历 void gothrough(str *head) { str *p; p=head; printf("正向遍历\n"); int m=n; while(m) { m--; printf("%-3d",p->a); p=p->next; } printf("\n反向遍历\n"); m=n; while(m) { m--; p=p->prior; printf("%-3d",p->a); } }//删除节点,不是删除数据 void deletelist(str *head){ printf("你要删除哪个节点?\t"); int node; scanf("%d",&node); str *front,*behind; front=behind=head; behind=behind->next; int m=n; if(node>2) while(node>2) { behind=behind->next; front=front->next; node--; } if(1==node) { head->a=behind->a;// 本来开始不是这样的,突然发现好像头结点不能删除,不然遍历会出问题 。所以换了一个方法 假删除头结点 } behind=behind->next; front->next=behind; behind->prior=front; head=front; n--; }//插入节点,准确的说我只插入到了尾部,懒得很,今天还有很多事要做 插入中间其实也不难 void insert(str *head){ int a,node=n; str *p,*q,*str1; str1=(str *)malloc(sizeof(str)); printf("\n你要插入的数\n"); scanf("%d",&str1->a); p=head; while(node>1) { p=p->next; node--; } q=p->next; p->next=str1; str1->prior=p; q->prior=str1; str1->next=q; n++; } int main(){ str *head; int m; head=(str *)malloc(sizeof(str));// 重点**为他分配空间是必须的(1.其他函数没有对她进行分配空间 2.就算其他空间分配了空间也只能在那个函数中有效,我们要的是全局有效) head=creat(head); gothrough(head); while(1) { printf("\n1.添加数据\t2.删除数据\t3.正反遍历\n"); scanf("%d",&m); if(1==m) { insert(head); } if(2==m) { deletelist(head); } if(3==m) { gothrough(head); } } }
代码刚写的,希望有大牛们给点意见或建议
1 0
- 双向循环链表(创建·插入·删除·遍历)
- 双向循环链表的创建,插入与删除。
- 双向循环链表的创建,插入,删除操作
- 双向循环链表的创建修改插入删除操作
- 双向链表的有关操作(创建,遍历,插入,删除)
- 双向链表的插入、删除、遍历
- 双向循环链表的插入删除
- 双向循环链表 初始化 插入 删除
- 双向循环链表(插入,删除,就地逆置)
- 双向链表的创建/插入/删除
- 双向链表创建、插入、删除
- 双向链表(创建、求长、打印、删除、插入)
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
- 双向循环链表的创建、插入、删除、求长、查询、打印、修改、清空、销毁
- 单链表/双向链表的建立/遍历/插入/删除
- 双向循环链表的插入和删除
- 带头双向循环链表的插入和删除
- Android 编码规范
- C++ 中Traits技术 (5) —— 关于STL中对迭代器封装的类型介绍
- Python Mixin编程机制
- 专题二 1013
- 搜索与机器学习
- 双向循环链表(创建·插入·删除·遍历)
- Swift中文教程(六)函数
- Linux驱动开发-15、网络设备驱动
- SharePoint 轻量化应用之HR招聘系统之初试结果通知及复试面试通知表单
- CSS滤镜
- OKHttp源码解析
- Android的性能优化
- 教师面试详细流程
- 使用Jquery实现点击文字变成输入框、点击按钮刷新网页