c++ 顺序表及其相关操作

《仅供自己学习参考》
顺序表,线性表的顺序存储结构。

  • 以数组空间的形式存储
  • 数据元素逻辑上相邻,物理位置也相邻
  • 以一组连续的存储单元依次存储数据元素

前提:

#include<iostream>
#include<stdlib.h> 
#define LIST_SIZE 100
#define SIZE 10
#define OK 1
#define ERROR 0
using namespace std;
typedef int Status;
struct List
{
	int *elem;//线性表(顺序表)在这里分配的是数组空间,L.elem是地址,L.elem[i]是数组对应的值
	int length;//当前长度
	int listsize;//当前分配的存储容量
};

顺便在主函数中实现合并操作

  • 已知线性表La,Lb,求A=A并B
  • 在这里,我们可以将问题看作是,扩大线性表La,添加进去在Lb中存在,且La中不存在的元素

  • 创建空表
Status InitList(List &L)//构造一个空线性表L
{
	L.elem=(int *)malloc(LIST_SIZE * sizeof(int));
	if(!L.elem)exit(ERROR);
	L.length=0;
	L.listsize=LIST_SIZE;
	return OK;
}
  • 插入操作
Status ListInsert(List &L,int i,int e)//在位置i之前添加e
{
	if(i<1||i>L.length+1) return ERROR;
	if(L.length>=L.listsize)
	{
		int *newbase=(int *)realloc(L.elem,(L.listsize+SIZE)*sizeof(int));
		if(!newbase) exit(ERROR);
		L.elem=newbase;
		L.listsize+=SIZE;
	}
	int* q=&(L.elem[i-1]);
	for(int *p=&(L.elem[L.length-1]);p>=q;--p)
		*(p+1)=*p;
	*q=e;
	++L.length;
	return OK;
}
  • 删除操作
Status ListDelete(List &L,int i, int *e)//删除第i位元素,并用e返回其值
{
	if(i<1||i>L.length+1) return ERROR;
	int *p=&(L.elem[i-1]);
	e=p;
	int *q=L.elem+L.length-1;
	for(++p;p<=q;p++)
		*(p-1)=*p;
	--L.length;
	return OK;
}
  • 显示元素
void ListShow(List L)
{
	for(int i=0;i<L.length;i++)
		cout<<L.elem[i];
	cout<<endl;
}
  • 主函数
int main()
{
	int ii=1;
	List l1,l2;
	InitList(l1);
	InitList(l2);
	ListInsert(l1,1,1);
	ListInsert(l1,2,3);
	ListInsert(l1,3,4);
	ListInsert(l2,1,2);
	ListInsert(l2,2,3);
	ListInsert(l2,3,5);
	ListShow(l1);
	ListShow(l2);
	for(int i=0;i<l2.length;i++)//==合并操作==
	{
		for(int j=0;j<l1.length;j++)
		{
			if(l1.elem[j]==l2.elem[i])
				ii*=0;
		}
		if(ii==1)
			ListInsert(l1,l1.length+1,l2.elem[i]);
		ii=1;
	}
	ListShow(l1);
	return 0;
}
  • 运行结果
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值