带头结点单链表排序的单链表上统计出值为X的元素的个数的算法

设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点 - Raby_Draby - 博客园
代码如下:
void Del_X_3(LinkList &L,ElemType x)
if(L==NULL)
if(L-&data==x)
Del_X_3(L,x);//位置1
Del_X_3(L-&next,x);//位置2
我们的疑点是递归操作中好像只进行了删除操作,而没有改变被删除结点的前驱,使其指向被删除结点的下一个结点。
例如p指向要删除的结点,q为该结点的前驱,那么要实现删除结点,代码为:q-&next=p-&next;
1、函数的递归调用时,总会再调用前将现有函数中的变量压入堆栈进行保存。
2、例如为了简便起见,我们定义一个单链表,且只含有三个数据:1,5,6.我们要删除的数据 为5。函数在执行时,走到位置2处,将L-&next作为参数,传递到了函数Del_X_3中,这里传入的参数是引用类型,进入函数体后:
L=L-& //这里L为调用该函数的外层L-&next,故这里实现了L-&next=L-next-&next,如下图
Del_X_3(L,x);
为了更好的理解编写工程运行一下,主函数如下:
(我们可以进行单步调试,看一下程序的执行流程,这里略)
typedef int ElemT
#include &lianbiaohead.h&
#include &lianbiaoname.h&
#include &lianbiaostruct.h&
void Del_X_3(LinkList &L,ElemType x)
if(L==NULL)
if(L-&data==x)
Del_X_3(L,x);
Del_X_3(L-&next,x);
int main()
const int NUM=3;
ElemType a[NUM]={1,5,6};
LinkList L;
InitList(&L);
LinkList p=L;
LNode* p1=L;
for(int i=0;i#i++)
LinkList s=(LinkList)malloc(sizeof(LNode));
s-&data=a[i];
ListInsert_L(L,p,s);
cout&&&删除之前&&&
ListTraverse(L);
Del_X_3(L-&next,5);
cout&&&删除之后&&&
ListTraverse(L);
执行效果如下:已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序_文档下载
亿万文档 免费下载
当前位置: &
& 已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序
已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序
有两个按元素值递增有序的线性表A和B以单链表作存储结构,试编写算法将A表和B表归并成一个按元素值递减有序的线性表C
长度大于1的单循环链表中编写算法删除结点*s的直接前驱结点。
单链表线性表中含有三类字符的数据构造三个以循环链表示的线性表,使每一个表中只含同一类的字符
有一双链表,每个结点中除有prior、data和next域外,还有一访问频度域freq每当在链表上进行一次LOCATE(L,x)运算,元素值为x的结点中freq域的值增1
//系统功能:1、已知带头结点的动态单链表L中的结点是按整数值递增排序的,编写算法将值为x的结点插入到表L中,使L仍然有序。//
2、设计算法,逆置带头结点的动态链表L。要求利用原表的结点空间,并要求用尽可能少的时间完成。//
3、假设有两个按元素值递增有序的线性表A和B,均以单链表作存储结构,试编写算法将A表和B表归并成一个按元素值递减有序的线性表C,并要求利用原表的空间存放C。//
4、假设在长度大于1的单循环链表中,既无头结点也无头指针。s为指向某个结点的指针,编写算法删除结点*s的直接前驱结点。//
5、已知由单链表表示的线性表中,含有三类字符的数据元素(如:字母、数字和其它字符),设计算法构造三个以循环链表示的线性表,使每一个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的空间。(头结点可以另辟空间)//
6、有一双链表,每个结点中除有prior、data和next域外,还有一访问频度域freq,在链表被启用前,其值均初始化为零。每当在链表上进行一次LOCATE(L,x)运算,元素值为x的结点中freq域的值增1,并使此链表中结点保持按freq递减的顺序排列,以便使频繁访问的结点总是靠近表头。设计满足上述要求的LOCATE算法并加以测试。#include&iostream&#include&cstdio&#include&cstring&#include&cstdlib&typedef int Stypedef int ElemTtypedef char ElemType1[100];typedef struct LNode{ElemT
struct LNode
* }LNode,*LinkLtypedef struct LNode1{ElemType1
//char data[100]
struct LNode1
* struct LNode1
* }LNode1,*LinkList1;//**********************************初始化********9/17*************************************************Status InitList_L(LinkList &L){L=new LNL-&next=NULL;return 1;}Status InitList_L1(LinkList1 &L){L=new LNode1;L-&next=NULL;return 1;}//*********************************求表长**********9/17**************************************************Status
ListLength_L(LinkList L){LinkLp=L-&
//p指向第一个结点int i=0;while(p){
}}//**********************************创建单链表*********9/17*************************************************void CreateList_L(LinkList &L,int &n){L=new LNLinkLL-&next=NULL; //先建立一个带头结点的单链表for( i=n;i&0;i--){p=new LN cin&&p-& p-&next=L-&L-&next=p;
//插入到表头}cout&&&链表中元素排列顺序为&&&
Word文档免费下载: (下载1-5页,共5页)
1.试编写在带头结点的单链表中删除(一个)最小值结点的(高效)算法。 【题目...已知带头结点的动态单链表 L 中的结点是按整数值递增排列,试写一算法将值为 ...项目 单链表上的操作 时数 2 性质 验证 内容:1、已知带头结点的动态单链表 L 中的结点是按整数值递增排序的,试写 一算法将值为 x 的结点插入到表 L 中,...(&%d &,Lb.elem[i]); } }*/ 习题二③、 已知带头结点的动态单链表 L 中的结点是按整数值递增排列的, 试写一算法将值 x 为的 结点插入到表 L 中,...题目 1: 已知带头结点的动态单链表 L 中的结点是按整数值递增排序的, 试写一算法 将值为 x 的结点插入到表 L 中,使 L 仍然有序。 题目 2: 设计一算法...[i]); } printf(&\n&); } 2.5 已知带头结点的动态单链表 L 中的节点是按整数值递增排列的, 试写一算法将值为 x 的 结点插入表 L 中,使 L 仍然有...}LinkL LinkList *L,*L1,*L2; 4、已知带头结点的动态单链表 L 中的结点是按整数值递增排列,试写一算法将值为 X 的结点 插入链表 L 中,使 L 仍然...实验一: 已知带头结点的动态单链表 L 中的结点是按整数值递增排序的,试写 一算法将值为 x 的结点插入到表 L 中,使 L 仍然有序。 1 《数据结构》实验讲义...1、已知带头结点的单链表 L 中的结点是按整数值递增排列的,试写一算法,将值 为 x 的结点插入到表 L 中,使得 L 仍然有序。 (10 分) 2、假设二叉排序树...6-22. 已知带头结点的动态单链表 L 中的结点是按整数值递增排列的,试写一算法将值为 x 的结点插入表 L 中,使 L 仍然有序。 6-23. 试编写在带头结点的...在给定值 为 x 的结点后插入一个新结点的时间复杂...已知带头结点的动态单链表 L 中的结点是按整数值递增...s 为指向链表中某个结点的指针,试编写算法删 除...编写一个带头结点的单链表中值为2的结点之前插入值为1的结点的算法_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
编写一个带头结点的单链表中值为2的结点之前插入值为1的结点的算法
我有更好的答案
/第一节点为s } else {
s-& } /新节点后续指向p
/寻找不小于x的节点位置 {
p=p-&/插入新节点:按升序插入///如果表头为空;data & x)/&#47,修改头指针 {
s-&next=p;/定义单链表结构类型typedef struct linknode{ int
struct linknode *next,int x){ LinkL
//在单链表插入位置,);}LNode,*LinkL/申请内存出错\n&/p是准备插入节点指针;/新节点后续指向p
pre-&next = / / } if(pre==p)&#47,由p指向 while (p !=NULL && p-& /next=NULL;x为插入值int InsertOrder_LL(LinkList *data=x; s-&/如果是在第一个节点前插入,直接将s设置表头. if(p==NULL) {
s-&next=NULL;
///s是新节点指针 LinkL///pre后续指向新节点 }
return 1,pre是p的前趋指针 //生成一个新节点 s=(LinkList)malloc(sizeof(LNode)); if(s==NULL) {
printf(&next=p;
return 0; } s-&新节点后继指向空 p=pre=*phead&#47
采纳率:58%
为您推荐:
其他类似问题
单链表的相关知识
等待您来回答}

我要回帖

更多关于 创建带头结点的单链表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信