当前位置: 首页 > news >正文

数据结构中三表合一的实现

任务描述:La表的数据(3,5,8,11) Lb表的数据是(2,6,8,9,11,15,20)将La中的数据和Lb的数据按顺序依次插入到Lc中 但是要为Lc至少初始化一个数据 否则就插不进去 不知道怎么改 而且display()还是返回状态结果。


 

#include <iostream>
//包含文件
using namespace std;

#define LIST_INIT_SIZE 100 
//初始化分配量

#define LISTINCREMENT 10 
//存储空间的分配增量


typedef int status;
//存储结构的类型定义 返回函数的状态结果代码
typedef int ElemType;
//数据元素/結点的表示 这个是用户自定义的数据类型 用于结点
typedef struct{

	ElemType *elem;//结点的储存空间首地址

	int length;//当前长度

	int listsize;//当前的分配的存储容量 (以sizeof (ElemType)为单位)
}IntNode; //相当于在java中定义了一个叫IntNode的结点类

status IntList(IntNode &L)
{//这个函数实现的是构建一个空线性表 在这之前我们要为其分配100个ElemType大小的



	L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	//分配100个ElemType大小的存储空间,并把地址分配给指向ElemType的指针elem

if(!L.elem)

		exit(0);//如果没有分配成功 那么存储失败

	L.length = 0;//长度为0

	L.listsize = LIST_INIT_SIZE;//初始容量是100

	return true;

}

status InsertList(IntNode &L,int n)
{


	cout<<"请输入数据"<<endl;

	for(int i =0;i<n;i++)
	{
		cin>>L.elem[i];

		++L.length;
	
		if(L.length>=L.listsize)
		{
 
			ElemType * newbase;

			newbase = (ElemType *)realloc(L.elem,

(L.listsize+LISTINCREMENT)*sizeof(ElemType));

			if(!newbase)

				exit(0);
			
			L.elem= newbase;
			

			L.length+=LISTINCREMENT;
			//这段代码的意思是 当线性表的长度小于最大分配的空间时 

//你就要重新分配出110的分配空间 并将指针赋给newbase

		}
	}

	return true;

}

status ListLength(IntNode &L)
{
 
	
		
		int answer;

		for(int i =0;i<L.length;i++)
		{
			answer++;
		}

	

		return L.length;
}

status  ListInsert(IntNode &L,int i,ElemType e)
{//在i的位置之前插入e元素 并使L的长度增加
//有了前置条件 i必须是不超出线性表范围的    1<=i<=L.length+1

	if(i>L.length||i<0)

		return false;

			if(L.length>=L.listsize)
		{
 
			ElemType * newbase;

			newbase = (ElemType *)realloc(L.elem,

(L.listsize+LISTINCREMENT)*sizeof(ElemType));

			if(!newbase)

				exit(0);
			
			L.elem= newbase;
			

			L.length+=LISTINCREMENT;
			//这段代码的意思是 当线性表的长度小于最大分配的空间时 

//你就要重新分配出110的分配空间 并将指针赋给newbase

		}

			ElemType *p =&(L.elem[i-1]);//指定的位置

			

			for(ElemType *q = &(L.elem[L.length-1]);q>=p;--q)

			{
				*(q+1)=*(q);//插入位置及之后的元素右移
			}
				*p =e;

			

				++L.length;

			

				return true;
		


}

status GetElem(IntNode &L,int i) {

	
		ElemType *p =  & (L.elem[i-1]);

		ElemType e = *p;

		return e;

	}

status LocateElem(IntNode &L,ElemType e)
{
	ElemType *p =&(L.elem[0]);//首位置

	for(ElemType *q = &(L.elem[L.length-1]);p<=q;p++)
	{
		if(e==*p)

		return true;

	}

	return false;
}

status display(IntNode &L,int n){

	 for ( int i = 0; i <=n ; i ++)
	 {
		 cout << L.elem[i]<< "  ";
	 }


	 return true;
	
 }


 int main()
 {


	 IntNode La;

	 IntNode Lb;

	 IntNode Lc;


	 IntList(La);
	 IntList(Lb);
	 IntList(Lc);


	 InsertList(Lc,1);

	


	 InsertList(La,4);

	 InsertList(Lb,7);


	 int i =1;

	 int j =1;

	 int k =0;


     ElemType e = GetElem(La,1);


	while(i<=La.length&&j<=Lb.length)
	{

		ElemType e1 = GetElem(La,i);

		ElemType e2 = GetElem(Lb,j);


		if(e1<=e2)
		{

			ListInsert(Lc,++k,e1);

			++i;
		}

		else
		{

			ListInsert(Lc,++k,e2);

			++j;
		}
	
	}

	while(i<=La.length)
	{
	

	ElemType e3 = GetElem(La,i++);

		ListInsert(Lc,++k,e3);
	}

		while(j<=Lb.length)
	{
	

	ElemType e4 = GetElem(Lb,j++);

		ListInsert(Lc,++k,e4);
	}


	cout<<display(Lc,11)<<endl;
	
	 cout<<endl;

	 return 0;
	 


 }


 


 

转载于:https://www.cnblogs.com/james1207/p/3315300.html

相关文章:

  • 雷电
  • CSLA - 介绍以及学习资料
  • 软粒子
  • gamma空间
  • python中库引用与import
  • 一道有趣的面试题
  • msg to msg
  • sql sever 触发器的概念和使用
  • unity——OnRenderImage深度解读
  • LOD and Reflections Adding Details
  • C-Lodop提示Access violation at address ...in module 'CLodopPrint32.exe' write of address
  • jQuery get post 碎片(远程html)加载
  • 天空盒的绘制
  • webbrowser登录-无id
  • 一秒钟后执行
  • 【个人向】《HTTP图解》阅后小结
  • Docker下部署自己的LNMP工作环境
  • git 常用命令
  • Java程序员幽默爆笑锦集
  • java概述
  • js数组之filter
  • Material Design
  • node 版本过低
  • Node项目之评分系统(二)- 数据库设计
  • OSS Web直传 (文件图片)
  • PHP的Ev教程三(Periodic watcher)
  • Redis 中的布隆过滤器
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Boot MyBatis配置多种数据库
  • Wamp集成环境 添加PHP的新版本
  • 和 || 运算
  • 聊聊sentinel的DegradeSlot
  • 批量截取pdf文件
  • 前端js -- this指向总结。
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我感觉这是史上最牛的防sql注入方法类
  • 自定义函数
  • scrapy中间件源码分析及常用中间件大全
  • #{} 和 ${}区别
  • (04)odoo视图操作
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (3)nginx 配置(nginx.conf)
  • (C++17) std算法之执行策略 execution
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (poj1.2.1)1970(筛选法模拟)
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET Core 和 .NET Framework 中的 MEF2