#include<iostream>
using namespace std;
typedef int ElementType;
const int MaxSize = 1010;
//顺序表结构体
struct List{
ElementType data[MaxSize];
int size;
//构造函数
List():data{0},size{0}{}
};
typedef List * ListPtr;
//建立空的顺序表
ListPtr CreatList(){
ListPtr L = (ListPtr)malloc(sizeof(struct List));
return L;
}
//在顺序表某个位置插入元素
void Insert(ListPtr L,int pos,ElementType value){
if(pos<1 || pos>L->size+1){
cout<<"位置不合法"<<"\n";
}
else{
for(int i=L->size; i>=pos; i--) L->data[i]=L->data[i-1];
L->data[pos-1]=value;
L->size++;
}
}
//删除某个位置的元素
void Delete(ListPtr L,int pos){
if(pos<1 || pos>L->size+1){
cout<<"位置不合法"<<"\n";
}
else{
for(int i=pos-1; i<L->size-1; i++) L->data[i]=L->data[i+1];
L->size--;
}
}
//遍历顺序表
void Traverser(ListPtr L){
for(int i=0; i<L->size ;i++){
cout<<L->data[i]<<" ";
}
cout<<"\n";
}
//求表长
int GetLength(ListPtr L){
return L->size;
}
//快速排序
void QuickSort(ListPtr L,int left,int right){
//递归结束条件
if(left>=right) return;
int i=left,j=right;
int tmp = L->data[left];
while(i != j){
while(i < j && L->data[j]>=tmp) j--;
while(i < j && L->data[i]<=tmp) i++;
if(i<j) swap(L->data[i],L->data[j]);
}
L->data[left] = L->data[i];
L->data[i] = tmp;
QuickSort(L,left,i-1);
QuickSort(L,i+1,right);
}
//求两个链表的交集
ListPtr GetInstrsection(ListPtr one,ListPtr two){
ListPtr ans = (ListPtr)malloc(sizeof(struct List));
int i=0,j=0;
while(i<one->size && j<two->size){
if(one->data[i]>two->data[j]) j++;
else if(one->data[i]<two->data[j]) i++;
else{
Insert(ans,ans->size+1,one->data[i]);
i++;j++;
}
}
return ans;
}
//求两个集合的并集
ListPtr GetUnion(ListPtr one,ListPtr two){
ListPtr ans = (ListPtr)malloc(sizeof(struct List));
int i=0,j=0;
while(i<one->size && j<two->size){
if(one->data[i]>=two->data[j]) Insert(ans,ans->size+1,two->data[j++]);
else Insert(ans,ans->size+1,one->data[i++]);
}
while(i<one->size) Insert(ans,ans->size+1,one->data[i++]);
while(j<two->size) Insert(ans,ans->size+1,two->data[j++]);
return ans;
}
int main(){
ListPtr one = CreatList();
ListPtr two = CreatList();
for(int i=0; i<10; i++){
Insert(one,i+1,rand()%50);
Insert(two,i+1,rand()%50);
}
QuickSort(one,0,one->size-1);
QuickSort(two,0,two->size-1);
ListPtr ans = GetUnion(one,two);
Traverser(ans);
// Traverser(tmp);
// Insert(tmp,2,520);
// Traverser(tmp);
// Delete(tmp,2);
// Traverser(tmp);
// QuickSort(tmp,0,tmp->size-1);
// Traverser(tmp);
}
数据结构顺序表
最新推荐文章于 2024-04-15 18:24:35 发布