`

删除不减链表L中大于mink小于maxk的元素

阅读更多

 

源代码:

 

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define NULL 0
#define OK 1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;

 //-----单链表的存储结构-----//
typedef struct LNode{
    ElemType data;         //数据域
    struct LNode * next;    //指针域
}LNode,*LinkList;

void CreastList_L(LinkList &L,int n){
	//创建带头结点的单链表L
	LNode *p,*q;
	int i;
	L=(LNode*)malloc(sizeof (LNode));
	L->next=NULL;   //先建立一个带头结点的单链表
	p=L;
	for (i=1;i<=n;i++){
		q=(LNode*)malloc(sizeof(LNode)); //生成新结点
		if(!p) exit(OVERFLOW);
		printf("Input the %dth data:",i);
		scanf("%d",&q->data);   //输入元素值
		q->next=NULL;
		p->next=q;
		p=q;
	}
}


Status  ListPartDelete_L(LinkList &L,ElemType mink,ElemType maxk){
	//删除不减链表L中大于mink小于maxk的元素,删除后并释放这些元素的空间
	LNode *p,*q;
    p=L;   //p最初指向头结点
    q=L->next;
    while(q!=NULL&&q->data<mink){
        p=p->next; q=q->next;
    }
    if(q==NULL)return OK; 
    while(q!=NULL&&q->data<=maxk){
        p->next=q->next;
        free(q);
        q=p->next;
    }
    return OK;
}

void PrintList(LinkList &L){
	//输出单链表
	LNode *p=L->next;
		while(p!=NULL){
			printf("%d",p->data);
			p=p->next;
		}
}


void main(){
	int n,mink , maxk;
	LinkList La;
	printf("Input the list  num:");
	scanf("%d",&n);
	CreastList_L(La,n);
	printf("Before Delete the list is:  ");
	PrintList(La);
	printf("\n");
	printf("please input the mink :\n ");
	scanf("%d",&mink);    //输入mink
	printf("please input the maxk:\n ");
	scanf("%d",&maxk);	 //输入maxk
	ListPartDelete_L(La, mink, maxk);
	printf("\nAfter Delete the list is:  ");
	PrintList(La);
	printf("\n");

}

 

0
0
分享到:
评论

相关推荐

    递增有序的单链表中删除值介于MINK和MAXK之间的.cpp

    递增有序的单链表中删除值介于MINK和MAXK之间的.cpp

    带头结点的单循环链表,删除所有值大于min,小于max的结点的算法

    一个带头结点的单循环链表,结点类型为(data.next),以haed为头指针,每个结点的data域存放的是一个整数,试构造一个删除所有值大于min,小于max的结点的算法

    数据结构答案第二章 线性表

    9. **Delete_Between函数**:删除递增排列链表L中值介于mink和maxk之间的所有元素。首先找到最后一个不大于mink的元素p,然后从p的下一个元素开始,找到第一个不小于maxk的元素q,将p的next指针直接指向q,跳过中间...

    数据结构第二章课后答案.pdf

    在链表中删除所有大于 mink 且小于 maxk 的元素。算法的思路是:首先检查输入参数 mink 和 maxk 的合法性,如果不合法则返回错误。如果合法,则遍历链表,删除所有大于 mink 且小于 maxk 的元素。 2.7 逆置算法 ...

    数据结构(严蔚敏)

    - `Delete_Between` 函数用于删除链表 L 中值大于 mink 且小于 maxk 的所有元素。首先找到最后一个不大于 mink 的元素,然后移除其后的所有符合条件的元素。 ```c Status Delete_Between(Linklist &L, int mink...

    2线性表算法答案.doc

    算法首先找到第一个元素值小于mink的元素,然后删除所有元素值在[mink, maxk]范围内的元素,最后更新链表的指针。 5. void Dels(LinkList *&head) 该算法实现了在链表中删除所有元素值大于当前最小元素值的元素。...

    DS第二章_课后习题答案.pdf

    删除大于 mink 且小于 maxk 的元素的算法的时间复杂度为 O(n),空间复杂度为 O(1)。 本资源摘要信息涵盖了线性表的基本概念、插入算法、删除算法等知识点,为学习线性表提供了详细的知识基础。

    考研辅导教材--数据结构习题答案

    - `Delete_Equal(Linklist &L)` 函数删除元素递增排列的链表 L 中所有值相同的元素。由于题目没有给出具体实现,但通常做法是从头开始遍历,删除所有与当前元素相同且后续出现的元素。 这些操作是数据结构学习的...

    数据结构(耿国华,高等教育出版社)第二章线性表课后习题第6题答案

    题目要求我们编写一个高效的算法,对一个以值递增有序排列的单链表进行处理,删除所有大于mink且小于maxk的元素。在这个场景下,链表的结构优势得以体现,因为我们可以直接遍历链表而不必关心元素在内存中的相对位置...

    算法设计题new(1).docx

    问题:设计一个算法,在带头结点的单链表中删除值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数)。 解决方案:使用两个指针p和q,p指向头结点,q指向头结点的下一个结点。遍历链表,将值大于mink且...

    2022北京交通大学数据结构第二次作业代码,约瑟夫环,就地逆置

    试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意: mink和maxk是给定的两个参变量,他们的值可以和表中相同,也可以...

    数据结构(严蔚敏_c语言版) 答案

    - **Delete_Between**: 从递增排列的链表中删除所有介于mink和maxk之间(不包括mink和maxk本身)的元素。找到最后一个不大于mink的元素,然后删除所有小于maxk的元素。 - **Delete_Equal**: 删除链表中所有相同值...

    大学计算机课程数据结构部分算法

    该函数用于删除一个元素递增排列的链表 `L` 中所有值大于 `mink` 且小于 `maxk` 的元素。通过找到第一个大于等于 `mink` 的元素和第一个大于等于 `maxk` 的元素之间的部分进行删除。 ##### 9. 删除元素递增排列的...

    第二章第2次单链表答案.ppt

    如果链表中所有元素都小于mink,函数返回`OK`表示没有找到需要删除的元素。 2. **带头结点单链表的就地逆置**: 单链表的逆置是将链表中的元素顺序反转。`ListInverse_L`函数用于实现这一操作。函数使用两个指针`p...

    线性表 实验报告.docx

    - **高效删除**:选题6中要删除所有大于mink且小于maxk的元素。由于链表已排序,可以一次遍历完成删除操作,时间复杂度为O(n),其中n为链表长度。 7. **删除重复元素**: - **去重操作**:选题7要求删除所有相同...

    数据结构第二章 线性表

    首先找到第一个值大于等于`mink`的元素,然后遍历链表直至找到第一个值大于`maxk`的元素,并删除中间的所有元素。 #### 2.20 删除链表中值相同的重复元素 ```c StatusDelete_Equal(Linklist&L) ``` 此函数用于删除...

    数据结构课后习题 - 第二章问题.pptx

    题目要求删除所有值大于mink且小于maxk的元素。提供的解法虽然能完成任务,但并不完善,因为它们没有处理所有边界情况。一个更全面的解决方案可以如下: ```c int ListDelete(LinkList &L, ElemType mink, ElemType...

    《数据结构与算法(C语言版)》课后习题答案.pdf

    - 需要找到第一个大于等于mink的节点和第一个不小于maxk的节点,然后进行连接操作。 这些习题解答涵盖了数据结构的基础概念和常见操作,对于理解C语言实现的数据结构与算法至关重要。通过解答这些题目,学习者能...

    严蔚敏版《数据结构》课后答案

    2.19 删除链表中指定范围的元素:`Delete_Between`函数删除值在mink和maxk之间的所有元素。首先找到第一个大于mink的节点p,然后通过迭代删除所有小于maxk的节点。 第三章提到了栈(Stack)的操作,栈是一种具有...

    数据结构第二章的几个答案

    这个算法用于删除有序链表`La`中所有大于`mink`且小于`maxk`的元素。初始化指针`p`指向链表头部,逐个检查节点,当找到大于`maxk`的节点时停止,否则,若节点值在`mink`和`maxk`之间,就删除该节点。时间复杂度为O...

Global site tag (gtag.js) - Google Analytics