源代码:
#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");
}
分享到:
相关推荐
递增有序的单链表中删除值介于MINK和MAXK之间的.cpp
一个带头结点的单循环链表,结点类型为(data.next),以haed为头指针,每个结点的data域存放的是一个整数,试构造一个删除所有值大于min,小于max的结点的算法
9. **Delete_Between函数**:删除递增排列链表L中值介于mink和maxk之间的所有元素。首先找到最后一个不大于mink的元素p,然后从p的下一个元素开始,找到第一个不小于maxk的元素q,将p的next指针直接指向q,跳过中间...
在链表中删除所有大于 mink 且小于 maxk 的元素。算法的思路是:首先检查输入参数 mink 和 maxk 的合法性,如果不合法则返回错误。如果合法,则遍历链表,删除所有大于 mink 且小于 maxk 的元素。 2.7 逆置算法 ...
- `Delete_Between` 函数用于删除链表 L 中值大于 mink 且小于 maxk 的所有元素。首先找到最后一个不大于 mink 的元素,然后移除其后的所有符合条件的元素。 ```c Status Delete_Between(Linklist &L, int mink...
算法首先找到第一个元素值小于mink的元素,然后删除所有元素值在[mink, maxk]范围内的元素,最后更新链表的指针。 5. void Dels(LinkList *&head) 该算法实现了在链表中删除所有元素值大于当前最小元素值的元素。...
删除大于 mink 且小于 maxk 的元素的算法的时间复杂度为 O(n),空间复杂度为 O(1)。 本资源摘要信息涵盖了线性表的基本概念、插入算法、删除算法等知识点,为学习线性表提供了详细的知识基础。
- `Delete_Equal(Linklist &L)` 函数删除元素递增排列的链表 L 中所有值相同的元素。由于题目没有给出具体实现,但通常做法是从头开始遍历,删除所有与当前元素相同且后续出现的元素。 这些操作是数据结构学习的...
题目要求我们编写一个高效的算法,对一个以值递增有序排列的单链表进行处理,删除所有大于mink且小于maxk的元素。在这个场景下,链表的结构优势得以体现,因为我们可以直接遍历链表而不必关心元素在内存中的相对位置...
问题:设计一个算法,在带头结点的单链表中删除值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数)。 解决方案:使用两个指针p和q,p指向头结点,q指向头结点的下一个结点。遍历链表,将值大于mink且...
试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意: mink和maxk是给定的两个参变量,他们的值可以和表中相同,也可以...
- **Delete_Between**: 从递增排列的链表中删除所有介于mink和maxk之间(不包括mink和maxk本身)的元素。找到最后一个不大于mink的元素,然后删除所有小于maxk的元素。 - **Delete_Equal**: 删除链表中所有相同值...
该函数用于删除一个元素递增排列的链表 `L` 中所有值大于 `mink` 且小于 `maxk` 的元素。通过找到第一个大于等于 `mink` 的元素和第一个大于等于 `maxk` 的元素之间的部分进行删除。 ##### 9. 删除元素递增排列的...
如果链表中所有元素都小于mink,函数返回`OK`表示没有找到需要删除的元素。 2. **带头结点单链表的就地逆置**: 单链表的逆置是将链表中的元素顺序反转。`ListInverse_L`函数用于实现这一操作。函数使用两个指针`p...
- **高效删除**:选题6中要删除所有大于mink且小于maxk的元素。由于链表已排序,可以一次遍历完成删除操作,时间复杂度为O(n),其中n为链表长度。 7. **删除重复元素**: - **去重操作**:选题7要求删除所有相同...
首先找到第一个值大于等于`mink`的元素,然后遍历链表直至找到第一个值大于`maxk`的元素,并删除中间的所有元素。 #### 2.20 删除链表中值相同的重复元素 ```c StatusDelete_Equal(Linklist&L) ``` 此函数用于删除...
题目要求删除所有值大于mink且小于maxk的元素。提供的解法虽然能完成任务,但并不完善,因为它们没有处理所有边界情况。一个更全面的解决方案可以如下: ```c int ListDelete(LinkList &L, ElemType mink, ElemType...
- 需要找到第一个大于等于mink的节点和第一个不小于maxk的节点,然后进行连接操作。 这些习题解答涵盖了数据结构的基础概念和常见操作,对于理解C语言实现的数据结构与算法至关重要。通过解答这些题目,学习者能...
2.19 删除链表中指定范围的元素:`Delete_Between`函数删除值在mink和maxk之间的所有元素。首先找到第一个大于mink的节点p,然后通过迭代删除所有小于maxk的节点。 第三章提到了栈(Stack)的操作,栈是一种具有...
这个算法用于删除有序链表`La`中所有大于`mink`且小于`maxk`的元素。初始化指针`p`指向链表头部,逐个检查节点,当找到大于`maxk`的节点时停止,否则,若节点值在`mink`和`maxk`之间,就删除该节点。时间复杂度为O...