【数据结构】双链表的基本操作

在这里插入图片描述
#include < iostream >
#define NUM 100
using namespace std;

// 定义顺序表
typedef struct{

int data[NUM];
int size;

}Sqlist;

// 初始化顺序表 **必须要!!构建C表的时候会用上
void initSqlist(Sqlist &L)
{

L.size = 0;

}

// 创建顺序表
void createSqlist(Sqlist &L,int a[], int n)
{

for(int i=0;i<n;i++){
	L.data[i] = a[i];
}
L.size = n;

}

// 特定位置添加元素
int insertElem(Sqlist &L, int p,int e) // p为下标
{

int i;
if(p<0 || p>L.size || L.size==NUM)
	return 0; 
for(i=L.size-1;i>=p;i--){
	L.data[i+1] = L.data[i]; 
} 
L.data[++i] = e;
++L.size; // 顺序的表长要增加!! 
return 1;

}

// 特定位置删除元素
int deleteElem(Sqlist &L, int p)
{

int i;
if(p<0 || p>L.size-1)
	return 0; 
for(i=p;i<L.size-1;i++){
	L.data[i] = L.data[i+1]; 
} 
--L.size; //表长要减少!! 
return 1;

}

// 定位元素位置
int getLocation(Sqlist L,int e)
{

for(int i=0;i<L.size;i++)
    if(L.data[i] == e)
        return i;
return -1;  // 不能定为 0,否则会和上面返回的下标‘0’相冲突 

}

// 查找元素
int getElem(Sqlist L,int p)
{

if(p<0 || p>L.size-1)
    return 0; 
return L.data[p];

}

// 销毁顺序表
void destroy(Sqlist &L)
{

for(int i=0;i<L.size;i++)
{
	L.data[i] = 0;
}
L.size = 0;

}

// 求 A ∩B
void intersection(Sqlist La,Sqlist Lb,Sqlist& Lc)
{

for(int i=0;i<La.size;i++){
	Lc.data[i] = La.data[i];
	Lc.size++;
}
for(int i=0;i<Lc.size;i++)
{
	if(getLocation(Lb,Lc.data[i]) == -1){
		deleteElem(Lc,i);
		i--;
	}  
}

}

// 求 A - B
void difference(Sqlist La,Sqlist Lb,Sqlist& Lc)
{

for(int i=0;i<La.size;i++){
	Lc.data[i] = La.data[i];
	Lc.size++;
}
for(int i=0;i<Lc.size;i++)
{
	if(getLocation(Lb,Lc.data[i]) != -1){  // 找到相同则删除 
		deleteElem(Lc,i);
		i--;
  	}  
}

}

// 显示全部
void display(Sqlist L)
{

for(int i=0;i<L.size;i++)
    cout<<L.data[i]<<" ";
cout<<endl;

}

int main()
{

int a[NUM] = {5,4,7,9,0,2};
int b[NUM] = {7,3,5,1,2,9};
int c[NUM] = {7,4,3,8,0,9};

Sqlist L,La,Lb,Lc;

createSqlist(L,a,6);
display(L);    // 显示 L
cout<<"Add integer 3 in loc.4"<<endl; // 添加‘3’在下标为4的地方 
insertElem(L,4,3);
display(L);
cout<<"Delete integer integer in loc.2"<<endl; // 删除下标为2的数字 
deleteElem(L,2); 
display(L);
cout<<"The location of integer 2 is: "<<getLocation(L,2)<<endl; // 定位位置 
cout<<"The integer in loc.5 is: "<<getElem(L,3)<<endl;          // 查找元素 

createSqlist(La,b,6); 
cout<<"A = "; 
display(La); 
createSqlist(Lb,c,6);
cout<<"B = "; 
display(Lb); 

initSqlist(Lc);  // 再建一个顺序表 
cout<<"A ∩B = ";
intersection(La,Lb,Lc);
display(Lc); 

destroy(Lc);
cout<<"A - B = ";
difference(La,Lb,Lc);
display(Lc); 
 
return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值