数据结构(双链表/循环链表例题 )

news/2024/11/28 11:41:14/

有一个带头结点的双链表L设计一个算法让其所有元素逆置,即第一个元素变成最后元素,第二个元素变成倒数第二个元素

typedef struct DNode
{ElemType data;struct DNode *prior;struct DNode *next;
} Dlinknode;
void conversion(Dlinknode *&L)
{Dlinknode *p=L->next,*q;L->next=NULL;//仍然使用这个头结点,但是了另外创建了一条线while(p!=NULL){q=p->next;p->next=L->next;if(L->next!=NULL)L->next->prior=p;p->prior=L;p=q;}
}

//有一个带头结点的双链表L,设计一个算法使元素递增有序排列

void Sort(Dlinknode *&L)
{Dlinknode *p,*q,*pre;p=L->next->next;//p指向第二个节点L->next->next=NULL;//构造只含有一个头结点的链表while(p!=NULL){q=p->next;//标记q;pre=L;while(p->data>pre->next->data&&pre->next!=NULL)pre=pre->next;//寻找合适的插入位置//找到了合适的插入位置p->next=pre->next;if(pre->next!=NULL)pre->next->prior=p;pre->next=p;p->prior=pre;//这就是为什么不能要pre=L->next 那样会找不到pre的前驱//进行下一次循环p=q;}
}

//判断带头结点的循环双链表L(含两个以上结点)中的数据结点是否对称

bool equal(Dlinknode *L)
{bool same=true;//初始化为true; Dlinknode *p=L->next;//首节点Dlinknode *q=L->prior;//尾结点while(same){if(p->data!=q->data)same=false;if(p==q||p=q->prior)//偶数or奇数break;else{p=p->prior;q=q->next;}return same;}}

有一个带头结点的循环单链表L,设计一个算法统计其data值域为x的节点个数

int Count(linknode *L,int x,int &i)
{linknode *p=L->next;i=0;while(p!=L){if(p->data==x)i++;p=p->next;}return i;
}

有一个带头结点的循环双链表L,设计一个算法删除第一个data域值为x的节点

bool Count(linknode *L,ElemType x)
{linknode *p=L->next;while(p!=L&&p->data!=x)p=p->next;//循环化寻找if(p!=L)//是找到了而不是循环结束{p->next=prior=p->prior;p->prior->next=p->next;free(p);return true;}else return false;}

http://www.ppmy.cn/news/487352.html

相关文章

Python可变数据类型和不可变数据类型及函数参数传递

可变数据类型: 列表、字典、集合 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称可变数据类型。 不可变数据类型: 整型,字符串、元组 当该数据类型的对应…

数据结构(双链表的逆置)

试写一个算法,对双链表进行就地逆置 (头插法) void Reserve(DLinkNode *&L) {DLinkNode *pNULL,*q;//L->nextNULL;while(p!NULL){qp>next;//用q标记后继节点if(L->next!NULL)//这步发生是,表里一个数都没有,L指向空L->next-…

数据结构(顺序栈)

实现栈的初始化&#xff0c;进栈&#xff0c;出栈&#xff0c;取栈顶&#xff0c;判断是否空栈&#xff0c;销毁栈 #include<iostream> #include<cstdio> #include<malloc.h> using namespace std; typedef int ElemType; const int MaxSize50; typedef str…

数据结构(Kruskal算法)

main.cpp #include<iostream> #include <stdio.h> #include <algorithm> using namespace std; const int N50005; int head[N],tot0,n,m,cnt0,fa[N]; int ans0; struct Edge{int u,v;//边的两个顶点int w;//边的权值inline friend bool operator <(Edge…

B端产品之数据分析能力

目录 学习目标&#xff1a;数据分析的思维框架以及工作需要的知识结构&#xff0c;数据分析结果外化-撰写数据分析报告 分析流程分析要点分析报告 数据分析流程 明确主题&#xff0c;尽量细化提出假设验证并修正假设&#xff1a;分析过程中对各个关联维度进行数据可视化观察…

Git进阶系列 | 2. Git中的分支策略

Git是最流行的代码版本控制系统&#xff0c;这一系列文章介绍了一些Git的高阶使用方式&#xff0c;从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章&#xff0c;这是第2篇。原文&#xff1a;Branching Strategies in Git[1] 几乎所有的版本控制系统(VCS)都有某种类型的…

MybatiPlus

Java是按值传递还是按引用传递? 值传递(pass by value&#xff09;是指在调用方法时&#xff0c;将实际参数的值或内存地址复制一份传递到方法中(创建参数值或内存地址的副本) 引用传递&#xff08;pass by reference&#xff09;是指在调用方法时&#xff0c;将实际参数的内…