源代码:
#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的结点的算法
试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 参考实验指导书“实验题 5:删除有序...
创建一个链表(有头结点),指定该链表的大小n,输入链表的n个元素,创建链表,输入要删除的值e,将链表L中所有值为e的元素删除,并输出删除元素后的链表。 仅有一组测试数据 第一行:输入一个整数n表示链表的长度(1...
Status Delete_Between(Linklist &L,int mink,int maxk)//删除元素递增排列的链表L中值大于mink且小于maxk的所有元素 {if(L->next==NULL||mink>maxk) return ERROR; p=L; while(p->next&&p->next->data<=mink) p=p...
建立三个链表,然后删除A链表中与B,C链表中相同的元素,打印出各链表中的数据元素。
建立新链表储存两旧链表中的元素的交集
本小程序是对于循环双向链表中删除指定元素 考虑几种边界情况!
1.初始化 2.清空 3.求链表长度 4.检查链表是否为空 5.检查链表是否为满 6.遍历链表(设为输出元素7.从链表中查找元素 8.从链表中查找与给定元素值相同的... 从链表中删除元素 其他键退出。。。。。 其中黑体部分必做
C++实现链表模板(链表项的数据元素可以为任意类型):链表项的插入、删除、链表的打印、两个链表的连接 开发环境为VS2010
试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意: mink和maxk是给定的两个参变量,他们的值可以和表中相同,也可以...
《数据结构》作业系统题目:按要求删除链表中的元素,并保持链表连续性
产品级代码,安全可靠,包含如下功能: 1.创建链表 2.销毁链表 3.获取链表长度 4.清空链表 5.获取第pos个元素操作 6.插入元素到位置pos 7.删除位置pos处的元素 ...12.直接指定删除链表中的某个数据元素
以三元组形式输出用十字链表表示的矩阵的非零元素及其下标
输入一组数字,换行,输入要删除的元素,输出删除后的元素和元素个数。若输入字母,浮点型数据可判错。
(2)删除链表的第i个元素,输出该元素,显示链表; 三)就地置逆+求最大最小值 在题目(一)的单链表中: (1)将链表就地逆置 ,显示链表; (2)求链表中的最大,最小值,显示结果; 四) 链表的合并 (1)创建两个链表LA...
二叉树的层次遍历及宽度,哈夫曼树,将L中的整数序列循环左移p个位置,将表L中所有值为x 的元素删除,判断链表中是否存在环,删除单链表L(L中元素值各不相同)的最大值所对应的结点,并返回该值,树的孩子兄弟表示...
数据结构 作业 链表的操作 完美链表 包括链表的 构造 数值的插入 删除 几种排序。。。。
设计算法以判断一个带头结点的单循环链表是否满足这样的条件,其中每个节点的元素值与其序号的差的绝对值不大于3.若成立,返回TRUE,否则返回FALSE,任务利用递增有序地单循环链表表示集合,分别求两个链表表示的集合...
将一个首结点指针为a的单链表A分解成两个单链表A和B, 其疾结点指针为a和b,使得链表 A中含有原链表 A中序号为 奇数的元素,而链表B中含有原链表A中序号为偶数的元素, 且保持原来的相对顺序。