线性表的顺序表示和实现

【实验内容】

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef int ElemType;

typedef int Status;

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

typedef struct  //参考书Pg. 22

{

ElemType *base;//数组元素基址

int length;//数组不同维度的大小

int listsize;//当前分配的存储容量

}SqList;

//线性表初始化函数:

//初始构造  LIST_INIT_SIZE 的线性表 L。

Status InitList_Sq(SqList &L)

{

L.base =new ElemType[LIST_INIT_SIZE];

L.length =0;

L.listsize =sizeof(ElemType)*LIST_INIT_SIZE;

return true;

}

//销毁一个线性表

//释放数组元素所占内存,并设置相关指针为0

Status DestroyArray(SqList &L)

{

if(L.base )

{

delete[] L.base ;

L.base =NULL;

}

L.length =0;

L.listsize=0;

return true;

}

//在L中第i个位置之前插入新的数据元素e, L的长度加1

Status ListInsert (SqList &L, int i,ElemType e)

{

if((i<1)||(i>L.length+1))

return false;

if(L.length==LIST_INIT_SIZE)

return false;

int j;

for(j=L.length-1;j>=i-1;j--)

{

L.base[j+1]=L.base[j];

}

L.base[i-1]=e;

L.length++;

return true;

}

//删掉L的第i个数据元素,并用e返回其值,L的长度减1

Status ListDelete (SqList &L, int i,ElemType &e)

{

if((i<1)||(i>L.length)) return false;

int j;

e=L.base[i-1];

for(j=i;j<=L.length-1;j++ )

{

L.base [j-1]=L.base [j];

}

L.length--;

return true;

}

//La和Lb的数据时按值非递减排列,归并La和Lb得到新的线性表 Lc,Lc的数据元素也按非递减排序

Status MergeList (SqList &La,SqList &Lb,SqList &Lc)

{

int i,j,temp;

for(i=1;i<La.length;i++)

{

for(j=0;j<La.length-i;j++)

{

if(La.base[j]>La.base[j+1])

{

temp=La.base[j];

La.base[j]=La.base[j+1];

La.base[j+1]=temp;

}

}

}

for(i=1;i<Lb.length;i++)

{

for(j=0;j<Lb.length-i;j++)

{

if(Lb.base[j]>Lb.base[j+1])

{

temp=Lb.base[j];

Lb.base[j]=Lb.base[j+1];

Lb.base[j+1]=temp;

}

}

}

Lc.length=La.length+Lb.length;

for(i=0;i<(La.length+Lb.length);i++)

{

if(i<La.length)

Lc.base[i]=La.base[i];

else

Lc.base[i]=Lb.base[i-La.length];

}

for(i=1;i<Lc.length;i++)

{

for(j=0;j<Lc.length-i;j++)

{

if(Lc.base[j]>Lc.base[j+1])

{

temp=Lc.base[j];

Lc.base[j]=Lc.base[j+1];

Lc.base[j+1]=temp;

}

}

}

return true;

}

//主函数

int main(int argc,char* argv[])

{

    //输入你的姓名和学号

printf("\n%s, %s\n",name,id);

SqList La;

   //初始化 La

InitList_Sq(La);

    

//为La赋值,里面的base数组元素赋值为【3,5,8,11】,length为4

//请补充你的代码

La.base[0]=3;

La.base[1]=5;

La.base[2]=8;

La.base[3]=11;

La.length=4;

//输出当前La中的base数组元素和长度, 屏幕应为显示:当前La中的元素为【3,5,8,11】,长度为4

//请补充你的代码

printf("当前La中的元素为【");

int k;

for(k=0;k<La.length;k++)

{

printf("%d",La.base[k]);

if(k!=La.length-1)

printf(",");

}

printf("】,长度为%d\n",La.length);

//在La中base数组的第3个元素之前插入元素6

//请补充你的代码

ListInsert (La, 3,6);

//输出当前La中的base数组元素和长度,屏幕应为显示:当前La中的元素为【3,5,6,8,11】,长度为5

//请补充你的代码

printf("当前La中的元素为【");

for(k=0;k<La.length;k++)

{

printf("%d",La.base[k]);

if(k!=La.length-1)

printf(",");

}

printf("】,长度为%d\n",La.length);

//删除当前La中base数组的第4个元素

//请补充你的代码

ElemType e;

ListDelete (La,4,e);

//输出当前La中的base数组元素和长度,屏幕应为显示:当前La中的元素为【3,5,6,11】,长度为4

//请补充你的代码

printf("当前La中的元素为【");

for(k=0;k<La.length;k++)

{

printf("%d",La.base[k]);

if(k!=La.length-1)

printf(",");

}

printf("】,长度为%d\n",La.length);

SqList Lb;

//初始化 Lb

//请补充你的代码

InitList_Sq(Lb);

//为Lb赋值,里面的base数组元素赋值为【2,3,4,6,8,9,10,14,17,18】,length为10

//请补充你的代码

ListInsert (Lb, 1,2);

ListInsert (Lb, 2,3);

ListInsert (Lb, 3,4);

ListInsert (Lb, 4,6);

ListInsert (Lb, 5,8);

ListInsert (Lb, 6,9);

ListInsert (Lb, 7,10);

ListInsert (Lb, 8,14);

ListInsert (Lb, 9,17);

ListInsert (Lb, 10,18);

//输出当前Lb中的base数组元素和长度,屏幕应为显示:当前Lb中的元素为【2,3,4,6,8,9,10,14,17,18】,长度为10

//请补充你的代码

printf("当前Lb中的元素为【");

for(k=0;k<Lb.length;k++)

{

printf("%d",Lb.base[k]);

if(k!=Lb.length-1)

printf(",");

}

printf("】,长度为%d\n",Lb.length);

SqList Lc;

//初始化 Lc

//请补充你的代码

InitList_Sq(Lc);

//合并当前La和Lb,得到新的Lc

//请补充你的代码

MergeList (La,Lb,Lc);

//输出当前Lc中的base数组元素和长度,屏幕应为显示:当前Lc中的元素为【2,3,3,4,5,6,6,8,9,10,11,14,17,18】,长度为14

//请补充你的代码

printf("当前Lc中的元素为【");

for(k=0;k<Lc.length;k++)

{

printf("%d",Lc.base[k]);

if(k!=Lc.length-1)

printf(",");

}

printf("】,长度为%d\n",Lc.length);

//释放La,Lb,Lc

//请补充你的代码

DestroyArray(La);

DestroyArray(Lb);

DestroyArray(Lc);

return 1;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我睁眼了呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值