首页 > 其他分享 >王道数据结构2025顺序表课后题5,6

王道数据结构2025顺序表课后题5,6

时间:2024-03-26 19:00:41浏览次数:16  
标签:f1 线性表 sqlist1 int 元素 2025 课后 L1 数据结构

5.有序顺序表中删除所有值重复的元素,使元素值均不同。

思路:利用一个新的顺序表存储元素,遍历重复元素的顺序表只要当前元素与新顺序表元素不同则进入。

//5.从有序顺序表中删掉所有重复的元素 
 sqlist1 quchong(sqlist1 L1)//1 2 2 4 4 8
 {
 	if(L1.length1!=0)
 	{
 		sqlist1 q;q.length1=0;q.data[0]=L1.data[0];q.length1++;
 		for(int i=1;i<L1.length1;i++)
 		{
 			if(L1.data[i]!=q.data[q.length1-1])
 			{
 				q.data[q.length1]=L1.data[i];
 				q.length1++;
			}
		}
		return q;
	}
	else{
		cout<<"wrong";
	}	
 }

6.两个有序表合成一个新的有序表。

思路:利用一个新的顺序表l3.双指针思想。f1指向l1顺序表中元素的位置,f2指向l2顺序表。

当f1处元素值小于等于f2时入l3,f1++,f2则是f2处元素值小于f1处元素值时入l3,f2++。

结束条件:f1比较完l1最后一个元素,f1=l1.length;f2同。

特殊情况:f1或f2先走到最后一位,此时对方剩下的元素仍要持续入l3.

sqlist1 combine(sqlist1 l1,sqlist1 l2)//6.合并两个有序表。cin:1 2 5 6 /3 4 5 out:1 2 3 4 5 5 6 32765???? 
 {
 	sqlist1 l3;
 	l3.length1=0;
 	int f1=0;int f2=0;
 	while(f1<l1.length1||f2<l2.length1)
 	{
 		if((l1.data[f1]<=l2.data[f2])||f2==l2.length1){
 			//cout<<f1<<endl;
 			l3.length1++;l3.data[l3.length1-1]=l1.data[f1];f1++;
			//out1(l3);	
		 }
		else if((l2.data[f2]<l1.data[f1])||f1==l1.length1){//f2==l2.length1与f1==l1.length1不可以同时成立,否则f2先到头时执行f1++此刻f1也到头应该结束,但下一句if仍在判断合理f2++故l3长度多+1 
 			l3.length1++;l3.data[l3.length1-1]=l2.data[f2];f2++;	
		 }	 
	}
	return l3;
 }

完整运行代码:

#include <bits/stdc++.h>
using namespace std;
//线性表练习
//静态分配线性表定义 
#define elemtype int
#define maxsize 100
typedef struct {
	elemtype data[maxsize];//定义线性表元素最大数量
	int length1;//线性表当前长度 
}sqlist1;//顺序表类型定义

//静态分配线性表初始化
initlist1(sqlist1 &L1)
{
	L1.length1=0;//初始化长度为1 
}

//动态分配线性表定义
#define initsize 100//定义初始存储容量为100
#define Maxsize 120//定义当前已分配的连续存储空间大小,若不够可修改 
 typedef struct{
 	elemtype *data;
 	int maxsize2;//动态定义线性表data[maxsize]即长度 
 	int length2;
 }sqlist2;
 
 //动态分配线性表初始化
 initlist2(sqlist2 &L2)
 {
 	L2.data=new elemtype(Maxsize);//为线性表分配初始的连续存储空间 
 	L2.length2=0; 
 	L2.maxsize2=initsize;//初始存储量为100。 	 
 }
 //插入数据 
 void insert1(sqlist1 &L1,int n)
 {
 	for(int i=0;i<n;i++)
 	{
 		cin>>L1.data[L1.length1];
 		L1.length1++;
	}
 }
  void insert2(sqlist2 &L2,int n)
 {
 	for(int i=0;i<n;i++)
 	{
 		cin>>L2.data[L2.length2];
 		L2.length2++;
	}
 }
 //输出数据
 void out1(sqlist1 L1)
 {
 	for(int i=0;i<L1.length1;i++)
 	{
 		cout<<L1.data[i]<<" ";
	}
	cout<<endl;
 }
void out2(sqlist2 L2)
 {
 	for(int i=0;i<L2.length2;i++)
 	{
 		cout<<L2.data[i]<<" ";
	}
	cout<<endl;
 }
 void del(sqlist1 &L1,int x)//1 2 2 4 6  3.删掉有序顺序表中所有值为x的元素 
 {
 	int len=0;int flag=-1;
 	for(int i=0;i<L1.length1;i++)
 	{
 		if(L1.data[i]==x){
 			len++;flag=i;
		 }
	 }
	 for(int i=flag-len+1;i<L1.length1-len;i++)
	 {
	 	L1.data[i]=L1.data[i+len];
	 }
	 L1.length1=L1.length1-len;
 }
 //5.从有序顺序表中删掉所有重复的元素 
 sqlist1 quchong(sqlist1 L1)//1 2 2 4 4 8
 {
 	if(L1.length1!=0)
 	{
 		sqlist1 q;q.length1=0;q.data[0]=L1.data[0];q.length1++;
 		for(int i=1;i<L1.length1;i++)
 		{
 			if(L1.data[i]!=q.data[q.length1-1])
 			{
 				q.data[q.length1]=L1.data[i];
 				q.length1++;
			}
		}
		return q;
	}
	else{
		cout<<"wrong";
	}	
 }
 //6.合并两个有序表。
 sqlist1 combine(sqlist1 l1,sqlist1 l2)//cin:1 2 5 6 /3 4 5 out:1 2 3 4 5 5 6 32765???? 
 {
 	sqlist1 l3;
 	l3.length1=0;
 	int f1=0;int f2=0;
 	while(f1<l1.length1||f2<l2.length1)
 	{
 		if((l1.data[f1]<=l2.data[f2])||f2==l2.length1){
 			//cout<<f1<<endl;
 			l3.length1++;l3.data[l3.length1-1]=l1.data[f1];f1++;
			//out1(l3);	
		 }
		else if((l2.data[f2]<l1.data[f1])||f1==l1.length1){//f2==l2.length1与f1==l1.length1不可以同时成立,否则f2先到头时执行f1++此刻f1也到头应该结束,但下一句if仍在判断合理f2++故长度多+1 
 			l3.length1++;l3.data[l3.length1-1]=l2.data[f2];f2++;	
		 }	 
	}
	return l3;
 }
int main()
{
	sqlist1 L1;
	//sqlist2 L2;
	initlist1(L1);
//	initlist2(L2);
	insert1(L1,6);//输入L1	
	sqlist1 l2;
	initlist1(l2);
	//insert1(l2,3);//输入l2 
	//insert2(L2,3);
	out1(L1);
	//out1(l2);
	//out2(L2);
	//del(L1,2);out1(L1);
	out1(quchong(L1));
	//out1(combine(L1,l2));
	return 0;
}

 

标签:f1,线性表,sqlist1,int,元素,2025,课后,L1,数据结构
From: https://blog.csdn.net/qq_59095655/article/details/137048827

相关文章

  • 【图论 | 数据结构】用链式前向星存图(保姆级教程,详细图解+完整代码)
    一、概述链式前向星是一种用于存储图的数据结构,特别适合于存储稀疏图,它可以有效地存储图的边和节点信息,以及边的权重。它的主要思想是将每个节点的所有出边存储在一起,通过数组的方式连接(类似静态数组实现链表)。这种方法的优点是存储空间小,查询速度快,尤其适合于处理大规模......
  • 【数据结构】C语言单链表的实现
    有时我们不用顺序表,而使用链表,是因为顺序表存在一定的问题1、顺序表的中间/头部的插入、删除需要挪动数据2、扩容需要申请新空间,拷贝数据,释放旧空间,存在性能的消耗3、会有空间的浪费单链表:不带头单向循环链表双链表:带头双向循环链表单链表的具体实现:1、单链表的创建:2......
  • 根号数据结构与根号平衡入门指南
    本文为本人为应付学校科技节写的屑作。写得比较仓促,可能存在不严谨或错误之处,欢迎批评指正。在本文中若无特殊说明,\(n\)表示元素数量,\(m\)表示询问数量,\(V\)表示值域范围为\([1,V]\)。一、分块分块,即将数据划分为多个块,并在操作时对整个块进行整体处理的思想。分块并非一......
  • 数据结构-哈希表-007
    1哈希表-通讯录1.1哈希结点结构体定义/*=====自定义数据类型=====*/typedefstructperson_information{charname[32];charsex;intage;chartel[32];charaddr[64];}DATA_TYPE;/*=====定义一个哈希数据结点=====*/typedefstructhash_......
  • 数据结构——二叉搜索树详解
    一、二叉搜索树定义二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:1.非空左子树上所有节点的值都小于根节点的值。2.非空右子树上所有节点的值都大于根节点的值。3.左右子树也都为二叉搜索树。如下图所示:二、二叉搜索树的操作二叉搜索树结构:t......
  • Python数据结构实验 递归算法设计
    一、实验目的1.掌握递归程序设计的基本原理和方法;2.熟悉数据结构中顺序表和单链表下的递归算法设计思想;3.掌握并灵活运用递归算法解决一些较复杂的应用问题。二、实验环境1.Windows操作系统的计算机2.Python3.7环境平台和PyCharm编辑器三、实验说明 1.实现递归算法的程序......
  • HashMap---数据结构
    目录一、基本数据结构二、树化与退化三、索引计算四、put方法和扩容五、并发问题六、key的设计一、基本数据结构        在jdk1.7版本的时候,hashmap结构主要是使用数组+链表的格式,而在jdk1.8版本中,hashmap的数据结构增加了一种“红黑树”的结构,即数组+(......
  • 速通数据结构第三站 单链表
    系列文章目录速通数据结构与算法系列1  速通数据结构与算法第一站复杂度          http://t.csdnimg.cn/sxEGF2  速通数据结构与算法第二站顺序表 3 速通数据结构与算法第二站单链表 感谢佬们支持!目录系列文章目录前言一、单链表   ......
  • 北林oj数据结构259
    字符串的插入描述编写算法,实现下面函数的功能。函数voidinsert(char*s,char*t,intpos)将字符串t插入到字符串s中,插入位置为pos(插在第pos个字符前)。假设分配给字符串s的空间足够让字符串t插入。(说明:不得使用任何库函数)输入多组数据,每组数据有三行,第一行为插入的位置pos......
  • 数据结构算法系列----对动态规划的感悟
    简介:   最近我一直在做和复习动态规划的题目,对动态规划有了一些新的理解和感悟。本文就是基于最近做的一些题目写的。一、动态规划的题目形式和选择   当题目是对于求某一串数字或者字符的最值时,一般就回想到三种解法,dfs暴搜、动态规划、贪心。在这三个之中显......