• 练习2——顺序表


    //实现顺序表基本功能,然两个顺序表相并
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    typedef int T;
    class SeqList{
        T *data;
        int MaxSize;
        int last;
    public:
        SeqList(int sz);
        ~SeqList(){delete [] data;}
        int Length() const {return last+1;}
        int Find(T &x)const ;
        void Insert(int i,T &x);
        int Delete(T &x);
        int IsEmpty(){
            return last==-1;
        }
        int IsFull(){
            return last==MaxSize-1;
        }
        T GetData(int i){
            return data[i-1];
        }
        void SetData(int i,T & x){
            if(i>0&&i<last+1){
                data[i-1]=x;
            }
        }
        void input();
        void output() const ;
    
    
    };
    SeqList::SeqList(int sz) {
        if(sz>0){
            data=new T[sz];
            if(data!=NULL){
                MaxSize=sz;
                last=-1;
            } else{
                cerr<<"存储分配错误"<<endl;
                exit(1);
            }
        }
    }
    int SeqList::Find(T &x) const {
        int i=0;
        while(i<last&&data[i]!=x){
            i++;
        }
        cout<<"last"<<last<<"Find"<<x<<"i="<<i<<endl;
        if(i>=last)
            return -1;
        else{
            return i+1;
        }
    }
    void SeqList::Insert(int i, T &x) {
        if(last==MaxSize-1){
            cerr<<"无法插入"<<endl;
            exit(1);
        }
        if(i<0||i>last+1){
            cerr<<"参数越界"<<endl;
            exit(1);
        }
        last++;
        for(int j=last;j>i;j--){
            data[j]=data[j-1];
        }
        data[i]=x;
    }
    int SeqList::Delete(T &x) {
        int i=Find(x)-1;
        if(i>=0){last--;
            for(int j=i;j<=last;j++){
                data[j]=data[j+1];
            }
            return 1;
        }
        return 0;
    }
    void SeqList::input() {
        cout<<"请输入元素个数:";
        while(1){
            cin>>last;
            if(last<=MaxSize&&last>0)
                break;
            cout<<"元素个数有误,范围1~"<<MaxSize-1<<endl;
        }
        for(int i=0;i<last;i++){
            cout<<"请输入第"<<i+1<<"个元素:"<<endl;
            cin>>data[i];
        }
        cout<<"表建立完成"<<endl;
        last--;
    }
    void SeqList::output() const {
        for(int i=0;i<=last;i++){
            cout<<data[i]<<endl;
        }
    }
    void Union(SeqList &a,SeqList &b){
        int n=a.Length();
        int m=b.Length();
        for(int i=0;i<n;i++){
            int temp=a.GetData(i+1);
    //        cout<<temp<<endl;
            if(b.Find(temp)==-1){
                cout<<"将要插入"<<temp<<endl;
                b.Insert(m-1,temp);
    
                m++;
            }
        }
    //    b.output();
    }
    int main(){
        SeqList l1(5),l2(5);
        l1.input();
        l1.output();
        l2.input();
        l2.output();
        Union(l1,l2);
        l2.output();
    
    }
  • 相关阅读:
    php 数据类型
    Django REST framework基础:视图和路由
    Django REST framework基础:序列化
    android 适配器 ArrayAdapter,SimpleAdapter的学习
    关于系统模块设计的一点疑问?
    看了看 #ifndef 和#pragma once 的区别
    ace.js 中文手册
    .net core 3.1发布时视图Views文件夹不被打打包成.dll文件解决办法
    Asp.net core应用在 Kubernetes上内存使用率过高问题分析
    .Net Core内存回收模式及性能测试对比
  • 原文地址:https://www.cnblogs.com/wangjianupc/p/10587167.html
Copyright © 2020-2023  润新知