//初始化
Node*InitList()
{Node*head=(Node*)malloc(sizeof(Node));if(NULL==head){printf("内存分配失败!");}printf("内存分配成功!\n");head->data=-1;head->next=NULL;head->prior=NULL;return head;
}
//向链表中添加数据
void Add(Node *s,int n)
{Node *p=s;printf("请输入%d个数据:",n);for(int i=1;i<=n;i++){Node*q=(Node*)malloc(sizeof(Node));scanf("%d",&q->data);q->next=NULL;p->next=q;q->prior=p;p=q;}
}

将q节点插入到p节点之后时,要让q指针先和p->next节点相连接,最后在连接p和q,否者会造成重复;

//插入数据包括(头插,前插,尾插)
void Insert(Node*s)
{Node*p=s;int a,b;printf("请输入你要插入的数据:");scanf("%d",&a);Node*q=(Node*)malloc(sizeof(Node));q->data=a;q->next=NULL;q->prior=NULL;printf("请输入年要插入哪个数据之后:");scanf("%d",&b);int flag=0;while(p){if(p->data==b&&p->next!=NULL){q->next=p->next;p->next->prior=q;p->next=q;q->prior=p;flag=1;break;}else if(p->data==b&&p->next==NULL){p->next=q;q->prior=p;flag=1;break; }p=p->next;}if(flag==1){printf("插入成功!\n");}else{printf("插入失败,没有该数据!");}
}
//头插法
void Insert(Node*s)
{int a;printf("请输入你要插入的数据:");scanf("%d",&a);Node*q=(Node*)malloc(sizeof(Node));q->data=a;q->next=NULL;q->prior=NULL;q->next=s->next;s->next->prior=q;s->next=q;q->prior=s;
}
//删除操作
void Delete(Node*s)
{int a;printf("请输入你要删除的数据!");scanf("%d",&a); Node*temp=s; int flag=0;while(temp){ if(temp->data==a&&temp->next!=NULL){printf("已执行!");temp->next->prior=temp->prior;temp->prior->next=temp->next;free(temp);flag=1;break;}else if(temp->data==a&&temp->next==NULL)//如果删除的是最后一个节点; {printf("shabi");temp->prior->next=NULL;free(temp);flag=1;break;}temp=temp->next;}if(flag==1){printf("删除成功!");}else{printf("删除失败!"); }
}
//释放全部节点
void Empty(Node*s)
{Node*p=s;while(p){s=s->next;free(p);p=s;}printf("\n");printf("该内存已经释放!");
}

以下为原代码:
//双链表
#include<stdio.h>
#include<malloc.h>

typedef struct DNode{
int data;
struct DNode next;
struct DNode prior;
}Node;
//初始化
Node
InitList()
{
Node
head=(Node*)malloc(sizeof(Node));
if(NULLhead)
{
printf(“内存分配失败!”);
}
printf(“内存分配成功!\n”);
head->data=-1;
head->next=NULL;
head->prior=NULL;
return head;
}
//向链表中添加数据
void Add(Node s,int n)
{
Node p=s;
printf(“请输入%d个数据:”,n);
for(int i=1;i<=n;i++)
{
Node
q=(Node
)malloc(sizeof(Node));
scanf("%d",&q->data);
q->next=NULL;
p->next=q;
q->prior=p;
p=q;
}
}
void Display(Nodes)
{
Node
v=s->next;
while(v)
{
printf("%d->",v->data);
v=v->next;
}
}
//释放节点
void Empty(Nodes)
{
Node
p=s;
while§
{
s=s->next;
free§;
p=s;
}
printf("\n");
printf(“该内存已经释放!”);
}
//插入数据包括(尾插,前插,尾插)
void Insert(Nodes)
{
Node
p=s;
int a,b;
printf(“请输入你要插入的数据:”);
scanf("%d",&a);
Nodeq=(Node)malloc(sizeof(Node));
q->data=a;
q->next=NULL;
q->prior=NULL;
printf(“请输入年要插入哪个数据之后:”);
scanf("%d",&b);
int flag=0;
while§
{
if(p->datab&&p->next!=NULL)
{
q->next=p->next;
p->next->prior=q;
p->next=q;
q->prior=p;
flag=1;
break;
}
else if(p->datab&&p->nextNULL)
{
p->next=q;
q->prior=p;
flag=1;
break;
}
p=p->next;
}
if(flag==1)
{
printf(“插入成功!\n”);
}
else
{
printf(“插入失败,没有该数据!”);
}
}
//头插法
void Insert(Nodes)
{
int a;
printf(“请输入你要插入的数据:”);
scanf("%d",&a);
Node
q=(Node*)malloc(sizeof(Node));
q->data=a;
q->next=NULL;
q->prior=NULL;
q->next=s->next;
s->next->prior=q;
s->next=q;
q->prior=s;
}
//删除操作
/void Delete(Nodes)
{
int a;
printf(“请输入你要删除的数据!”);
scanf("%d",&a);
Node*temp=s;
int flag=0;
while(temp)
{

 if(temp->data==a&&temp->next!=NULL){printf("已执行!");temp->next->prior=temp->prior;temp->prior->next=temp->next;free(temp);flag=1;break;}else if(temp->data==a&&temp->next==NULL)//如果删除的是最后一个节点; {printf("shabi");temp->prior->next=NULL;free(temp);flag=1;break;}temp=temp->next;
}
if(flag==1)
{printf("删除成功!");
}
else
{printf("删除失败!");
}

}*/

int main()
{
Node *head;ni
head=InitList();
int a;
printf(“请输入你要增加多少数据:”);
scanf("%d",&a);
Add(head,a);
// Insert(head);
//printf(“该数据情况如下:\n”);
// Display(head);
// printf("\n");
//Delete(head);
// printf("\n");
printf(“该数据情况如下:\n”);
Display(head);
Empty(head);
}

c语言实现双链表的基本操作—增删改查相关推荐

  1. mysql 修改库的校对集_mysql数据库的基本操作(增删改查、字符集、校对集)

    MySQL数据库概述 MySQL数据库是经典的关系型数据库管理系统,MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Dat ...

  2. 单链表LinkedList的增删改查

    数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低(插入位置后面的元素需要集体后移),而且这两种数组的删除效率(集体前移)都很低,并且数组在创建后,其大小是固定了 ...

  3. mongodb基本操作=增删改查

    这两天总算清闲下来了,这里只介绍mongodb的一些基本增删改查,从大到小,从数据库到下面的集合表等,这里推荐一个mongodb的可视化工具Robo3T,在上面操作增删改查使用起来也简单 数据库相关的 ...

  4. Go语言sqlx库操作PostgreSQL数据库增删改查

    0. 引用 sqlx地址:https://github.com/jmoiron/sqlx PostgreSQL官网:https://www.postgresql.org/ 1. PostgreSQL安 ...

  5. C语言:构建一个二级链表并完成增删改查

    构建一个下图所示的链表,并完成增.删.改.查 示例代码: #include <stdio.h> #include <stdlib.h> #include <string. ...

  6. MongoDB基本操作(增删改查)

    2019独角兽企业重金招聘Python工程师标准>>> 基本操作 基本的"增删查改",在DOS环境下输入mongo命令打开shell,其实这个shell就是mon ...

  7. MongoDB 基本操作增删改查

    import pymongomongo_client = pymongo.MongoClient(host="127.0.0.1",port=27017)DB = mongo_cl ...

  8. flask中数据库的基本操作-增删改查【备忘】

    1.增加数据(就相当于增加一个实例对象)   user1 = User(name='long',email='1006550026@qq.com',password='123456',role_id= ...

  9. HBase数据库的基本操作增删改查

    # 进入hbase命令行,hbase需要在环境变量路径中 >hbase shell 表操作 # 显示hbase中的表 > list# 创建user表,包含info.data两个列族 > ...

最新文章

  1. ORB-SLAM中的ORB特征(提取)
  2. node exprass安装运行实例
  3. Visual Studio 2013开发 mini-filter driver step by step (2) - 编译,部署,运行
  4. CF570D-Tree Requests【长链剖分】
  5. IOS开发之格式化日期时间的使用 编程中常见问题
  6. 精选论文集|Transformer在视觉领域中的应用
  7. Python学习笔记:一维数据的插值
  8. ORA-01089 数据库无法正常关闭
  9. 去除桌面图标下的底色[XP系统]
  10. handbrake下载太慢_handbrake使用教程
  11. 某一api全开源网站源码
  12. 【智慧农业】智慧温室建造流程
  13. 微信H5分享朋友圈踩坑
  14. 【七天实战微信小程序】任务清单
  15. 马尔科夫链原理简介及应用
  16. ECC原理和RocketChip Cache ECC实现
  17. MuiPlayer - 一款优秀的 H5 视频播放器框架
  18. 我不能注销,重新启动,关闭我的windows XP机器?
  19. 更新Edge后打开网页失败问题
  20. vlc播放器或者web实现rtmp拉流

热门文章

  1. linux编程能否用于windows,使R包在Windows和Linux中都可以工作
  2. python怎么修改while循环类型_python 的for与while 的i改变
  3. flink physical partition
  4. 并联系统的失效率公式推导_电容的串并联计算方法
  5. 深圳职业技术学院计算机工程学院江学锋,毕业论文附属材料07013505刘丽.doc
  6. 两个python文件怎么联系在一起_【新手求助】怎样把两个程序连接在一起?老师作业,谢谢啦...
  7. java保留想要的字符,反转Java中的字符,同时保留一些字符 - java
  8. centos安装后两个启动项、_久违的更新—黑苹果的简易安装
  9. 七十、反转和合并链表、 链表有环的判断
  10. keras从入门到放弃(十六)内置预训练网络VGG