数据结构:线性表的理解及使用(C/C++)

数据结构:线性表的理解及使用(C/C++)

实验题目:创建一个线性表L,里面所有元素为整数,编写声明,插入,打印,以及分裂线性表的函数。其中分裂函数将线性表中第1,3,5 …个元素存入线性表L1,其余元素存入L2. 所有功能在主函数中实现。

代码如下:

#include<stdio.h>
#include<iostream>
 #include<stdlib.h> 
 #define  INIT_SIZE   100  /*线性表初始长度分配量*/ 
 #define  INCREMENT   10   /* 线性表存储分配量增量*/
#define  OK     1
#define  ERROR  0
using namespace std;
typedef  int  Elemtype; 
typedef  int  Status;
typedef struct{
	Elemtype *elem;//元素存储空间基地址 
	int length;//表的当前长度 
	int listsize;//表的初始分配存储容量 
	}SqList;
 Status InitList_Sq(SqList *L)//线性表初始化 
 {
 	 L->elem=(Elemtype*)malloc(INIT_SIZE*sizeof(Elemtype));
	   if(!L->elem){
	   	return ERROR;
	   }
	   L->length=1;
	   L->listsize=INIT_SIZE;
	   return OK;
 } 
 Status  ListInsert_Sq(SqList *L,int i, Elemtype e){  //线性表的插入函数 
 	int j;
	Elemtype *NewSpace;
	//插入位置不合法
	if(i<1||i>L->length)
	{
		return ERROR;
	}//判断程序是否溢出 
	if(L->length>=L->listsize){
		NewSpace=(Elemtype*)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(Elemtype)); //用realloc语句增加存储分配 
		if(!NewSpace){
			return ERROR;
		}
		L->elem=NewSpace;
		L->listsize+=INCREMENT;
	} 
	for(j=L->length;j>=i;j--){
		L->elem[j]=L->elem[j-1];//元素后移一位 
	}
	L->elem[j]=e;//插入元素e 
	L->length+=1;
	return OK; 
 }
 
void  ListSplit(SqList * L,SqList * L1,SqList * L2){//线性表分解函数
	int k=0,i=0,j=0;
	 for(i=0;i<L->length;++i){
	 	 if(L->elem[i]%2==0)
        {
            while(j!=L->length){
            	L2->elem[j]=L->elem[i];//若为偶元素则赋值给L2 
                 L2->length++;        //L2长度加一 
                 j++;
                 break;

			}

	 }
	 else{
            while(k!=L->length)
{
                 L1->elem[k]=L->elem[i];//其他元素赋值给L1 
                 L1->length++;
                 k++;
                 break;
            }
        }
    }


}
 void PrintElem(SqList *L){  //线性表输出 
 	for(int i=0;i<L->length-1;i++){
 		if(L->elem[i]<22)
 		cout<<L->elem[i]<<" ";
 		else
 		break;
	 }
	 cout<<endl;
 }
 
 int main(){
 	int i;
	SqList L,L1,L2;
	InitList_Sq(&L);
    InitList_Sq(&L1);
    InitList_Sq(&L2);

 for(i=1;i<=21;i++){
       ListInsert_Sq(&L,i,i);
    }
     ListSplit(&L,&L1,&L2);
     cout<<"L:";
     PrintElem(&L);
     cout<<"L1:";
     PrintElem(&L1);
     cout<<"L2:";
     PrintElem(&L2);

    return 0;
 }

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值