数据结构——11 有序双向链表中插入节点
来源:互联网 发布:java选择排序代码 编辑:程序博客网 时间:2024/06/05 00:19
双向链表——有序双向链表中插入节点
#include<iostream>using namespace std;struct node //node结构体,里面有两个个node指针,用来指向上/下一个node对象{int x;node *left; //指向什么类型的对象,就用什么类型的指针node *right;};node* create(int n) //创建链表,参数n表示结点的个数,返回类型是结点指针node*{if(n<1) //参数检测,链表最少有一个节点{cout<<"error input n!"<<endl;exit(0);}node *head=new node; //建立头结点node *p=head; //创建用于往后指的node指针for(int i=1;i<=n;i++){node *temp=new node; //new一个node指针temp->x=rand()%100;p->right=temp; //将p的right指向创建的temp,把新节点连接到链表后面temp->left=p; //temp的left指向p,新节点left指向上一个节点p=temp; //将p指向新结点temp,即p移动到下一个节点}p->right=NULL; //创建完成后,p->right为空,最后一个节点的right位nullhead->right->left=NULL; //创建完成后,第一个节点的left为nullreturn head;}void display(node *head) //输出链表{node *p;p=head->right; //p重新指向头结点后的那个结点,即for循环创建的第一个结点if(p==NULL)cout<<"NULL List";while(p!=NULL) //输出{cout<<p->x<<" ";p=p->right;}cout<<endl;}void sort(node *head){node *p,*s;p=head->right; //p重新指向头结点后的那个结点,即for循环创建的第一个节点int temp; //用于交换的临时变量while(p) //外循环从头结节后的第一个节点开始{s=p->right; //内循环从p的后一个结点开始while(s){if(p->x > s->x) //只交换结点里面的x,结点不动{temp=p->x;p->x=s->x;s->x=temp;}s=s->right; //内循环后移}p=p->right; //外循环后移}}void insert(node *head, int n) //直接将数n插入到链表head的适当位置{node *p,*s;p=head; //p重新指向头结点后的那个结点,即for循环创建的第一个节点while(p->right){if(p->right->x > n) //在有序列表中找到第一个比n大的节点,在它前面插入就行{node *temp=new node;temp->x=n;s=p->right; //用于反向连接的临时node指针stemp->right=p->right;p->right=temp; //插入适当位置,正向连接链表s->left=temp; //反向连接链表temp->left=p;break;}p=p->right;}if(p->right==NULL) //如果链表最后一个数还比n小,则直接放在链表最后{node *temp=new node;temp->x=n;p->right=temp; //连接上新来的最后一个节点temp->right=NULL; //right指针为nulltemp->left=p; //反向连接}}void insert1(node *head, int n) //既然有排序,就直接将插入的节点连接到第一个节点,然后排序{node *s,*p=head; //p重新指向头结点后的那个结点,即for循环创建的第一个节点node *t=new node;t->x=n;s=p->right; //用于反向连接的临时node指针st->right=p->right; //插入适当位置,正向连接链表p->right=t; s->left=t; //反向连接链表t->left=p;sort(head); //借助上面的排序}int main(){node *list; list=create(10); //建立链表display(list); //输出显示建立的链表,这里是讯链表,不用输出sort(list); //排序,称为有序列表display(list); //显示排序后的链表 insert(list,-2); //在有序列表中插入display(list); //显示有序列表插入后的链表insert1(list,99); //在有序列表中插入display(list); //显示有序列表插入后的链表return 0;}
0 0
- 数据结构——11 有序双向链表中插入节点
- 数据结构——10 双向链表插入和删除节点
- 向有序循环单向链表中插入节点
- 数据结构——有序单链表的建立、插入与删除
- 数据结构——12 删除两个双向链表中相同的节点
- 有序单链表节点的插入
- 数据结构——2 单链表插入和删除节点
- 将节点插入到建立起来的有序链表中
- 链表(篇1)循环有序链表中插入节点
- 双向链表 删除节点 插入节点
- 数据结构——单链表的创建、逆置、插入、有序表的建立、有序单链表合并等基础操作!!
- 双向链表中节点的插入与删除操作
- 数据结构——有序线性表的的插入与删除
- 数据结构-双向链表插入
- 数据结构面试之二——双向链表表、循环链表、有序链表的常见操作
- 数据结构面试之二——双向链表表、循环链表、有序链表的常见操作
- 数据结构面试之二——双向链表表、循环链表、有序链表的常见操作
- 实现一个 链表 有序插入新节点
- 使用python+机器学习方法进行情感分析(详细步骤)
- labe 加删除线
- Java给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
- java抽象类
- java中final,finally,finalize三者的作用和区别
- 数据结构——11 有序双向链表中插入节点
- 最小生成树之prim算法
- Linux修改静态IP
- jiffies
- QQ不支持传送文件夹怎么办?
- OpenCV实现图片锐化
- BZOJ 1009 DP+矩阵乘法
- 完美网络
- 用RVI方法,对iOS进行抓包