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


    任务描述: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;
    	 
    
    
     }



  • 相关阅读:
    async/await使用深入详解
    尴尬的事情又发生Newtonsoft.Json vs Protobuf.net
    在dotnet core下去中心化访问HTTP服务集群
    条件随机场CRF(一)从随机场到线性链条件随机场
    用hmmlearn学习隐马尔科夫模型HMM
    隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
    隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数
    隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率
    隐马尔科夫模型HMM(一)HMM模型
    EM算法原理总结
  • 原文地址:https://www.cnblogs.com/james1207/p/3315300.html
Copyright © 2020-2023  润新知