已知线性表中的元素(整数)以值递增有序排列,并以单链表做存储结构。试写一个程序,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素)。
#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
#define MAXSIZE 5
#define OVERFLOW -1
#define OK 1
#define listIncrement 2
#define num_stop -1
typedef int elemType;
typedef struct
{
elemType *elem;
int length;
int listsize;
}Sqlist;
int initList(Sqlist &list)
{
list.elem=new int[MAXSIZE];
if(!list.elem)
exit(OVERFLOW);
list.length=0;
list.listsize=MAXSIZE;
return OK;
}
int ListInsert(Sqlist &list,int i,int num)
{
int *newbase;
if(i<1)return ERROR;
if(list.length==list.listsize)//即将超越数组大小时重新动态分配数组大小
{
newbase=(int*)realloc(list.elem,(list.listsize+listIncrement)*sizeof(int));
if(!newbase)
exit(OVERFLOW);
list.elem=newbase;
list.listsize+=listIncrement;
}
list.elem[i-1]=num;
++list.length;
return OK;
}
void printList(Sqlist list)/*用于测试数据是否存储入顺序表*/
{
for(int k=0;k<list.length;k++)
printf("%d ",list.elem[k]);
}
void deleteList(Sqlist &list,int num)
{
int len=list.length;
elemType *str=list.elem;
int front=0;
while(front<len)
{
while(front<len && str[front]!=num)
front++;//值不为num时,指针右移,为从顺序表开头一直顺数到为num的元素
if(front<len)
while(front<len && str[len]==num)
len--;//为需要删除的数字时,线性表长度减1,为从顺序表尾部删除尾部连续的为num的元素
if(front<len)
{
str[front]=str[len-1];//题目仅要求删去值为num的元素,并未要求元素顺序排列不变,因此大胆猜想将靠后的元素往前移动
front++;//前指针右移
len--;//后指针左移
list.length--;//变换一次,顺序表长度-1
}
}
}
int main()
{
Sqlist list1;
int flag;
int num,count=0;
flag=initList(list1);
printf("请输入若干数字,并以%d结束:",num_stop);
scanf("%d",&num);
count++;
while(num!=-1)
{
flag=ListInsert(list1,count,num);
scanf("%d",&num);
count++;
}
printList(list1);printf("\n");
printf("需要删除的数字为:");
scanf("%d",&num);
deleteList(list1,num);
printf("删除后的线性表为:");
printList(list1);
printf("\n");
return 0;
}
- 已知线性表中元素以值递增有序排列,并以单链表作为存储结构,设计一个算法,删除表中值相同的多余元素
- 递增单链表删除所有大于mink且小于maxK的元素。
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 数据结构 — 4.删除单链表中所有值大于mink且小于maxk的元素
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- Java程序练习-删除所有大于mink且小于maxk的元素
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 设顺序表 S 中元素递增有序,编写算法删除 S 所有大于 k1 且小于 k2 的元素
- 数据结构链表习题2.27,假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
- 怎样编写一个程序,把一个有序整数数组放到二叉树中? 编写实现链表排序的一种算法。说明为什么你会选择用这样的方法?
- 程序员面试题目总结--数组(一)【递归求数组所有元素和、用一个for循环打印出一个二维数组、用递归判断数组是否是递增、有序数组中删除重复元素】
- 2.19-删除链表中大于mink且小于maxk的值;
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- (2)单链表的操作 ① 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数
- 已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
- 输入一组整型元素序列,使用尾插法建立一个带有头结点的单链表。 ② 实现该线性表的遍历。 ③ 在该单链表的第i个元素前插入一个整数。 ④ 删除该单链表中的第i个元素,其值通过参数将其返回。 ⑤ 建立两个
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现