数据结构顺序表

#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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值