zoukankan      html  css  js  c++  java
  • 数据结构之顺序表(C++版)

    #include <iostream>
    #include <stdlib.h>
    #define MAXLISTSIZE 100 //预设的存储空间最大容量

    using namespace std;
    typedef string ElemType;
    typedef struct{
    ElemType *elem; //存储空间基址
    int length; //当前长度
    int listsize; //允许的最大存储容量(以sizeof(ElemType)为单位)
    }SqList; //俗称顺序表

    void InitList(SqList &L);
    void LocateElem(SqList L);
    void ListInsert(SqList &L);
    void ListDelete(SqList &L);
    void DestroyList(SqList &L);
    void ListLength(SqList L);
    void ListEmpty(SqList L);
    void GetElem(SqList L);
    void MergeList_Sq();

    int main(void)
    {
    SqList L;
    int z;
    cout << "+---------------------------+" << ' ';
    cout << "|----------顺序表-----------|" << ' ';
    cout << "+---------------------------+" << ' ';
    cout << "提示:为保证您的操作得到保存,请按正常顺序退出系统^_^" << ' ';
    do
    {
    cout << ' ' << ' ' << ' ' << ' ' <<"--------------------------------" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ 主菜单 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+--------------------------------" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [1]----顺序表初始化 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [2]----顺序表的定位 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [3]----顺序表的插入 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [4]----顺序表的删除 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [5]----顺序表的销毁 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [6]----顺序表求表长 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [7]----顺序表的判空 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [8]----顺序表的存取 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [9]----顺序表的合并 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"+ [0]----退出系统 |" << ' ';
    cout << ' ' << ' ' << ' ' <<"--------------------------------" << ' ';
    cout << "请输入您的选择:";
    cin >> z;
    switch(z)
    {
    case 0 : break;
    case 1 : InitList(L);break;
    case 2 : LocateElem(L);break;
    case 3 : ListInsert(L);break;
    case 4 : ListDelete(L);break;
    case 5 : DestroyList(L);break;
    case 6 : ListLength(L);break;
    case 7 : ListEmpty(L);break;
    case 8 : GetElem(L);break;
    case 9 : MergeList_Sq();break;
    default:cout << "无效选项!" << ' ';system("pause");
    }
    }
    while(z!= 0);
    }

    //顺序表的初始化赋值
    void InitList(SqList &L)
    {
    int j;
    int maxsize;
    cout << "请输入顺序表的最大长度: ";
    cin >> maxsize;
    if(maxsize == 0)
    maxsize = MAXLISTSIZE;
    L.elem = new ElemType[maxsize];
    if(!L.elem) exit(1); //储存分配失败
    cout << "请输入顺序表的长度: ";
    cin >> L.length;
    L.listsize = maxsize; //该顺序表可以存储元素的最大容量
    cout << "请输入顺序表的元素: ";
    for (j = 0; j < L.length; j++)
    {
    cin >> L.elem[j];
    }
    system("pause"); //任意键继续
    }//InitList


    void LocateElem(SqList L)
    {
    ElemType e;
    int j;
    //在顺序表L中查找第一个值与e相等的元素,若存在输出该元素的位置,若不存在,输出所找的元素不存在
    j = 0; //j的初值为第一个元素的位序
    cout << "请输入要查找的元素:";
    cin >> e;
    while(j < L.length && L.elem[j] != e)

    ++j; //依次进行判定
    if(j < L.length) cout << "所找元素的位置为:" << j + 1; //找到满足判定条件的数据元素为第j个元素
    else cout << "所找的元素不存在"; //该线性表中不存在满足判定的数据元素
    cout << ' ';
    system("pause");
    }//LocateElem


    void ListInsert(SqList &L)
    {
    int j;
    int pos;
    ElemType e;
    cout << "请输入所要插入的位置及元素:";
    cin >> pos >>e;
    //若存储空间不满且1 <= pos <= Listlength(L) + 1,则在顺序表L的第pos个元素之前插入元素e,输出插入元素后的顺序表
    if(pos < 1 || pos > L.length + 1)
    {
    cout << "插入位置不合法" << ' '; //插入位置不合法
    system("pause");
    return;
    }
    if(L.length >= L.listsize)
    {
    cout << "当前存储空间已满,无法插入,请重新选择顺序表功能" << ' '; //当前存储空间已满,无法插入
    system("pause");
    return;
    }
    for(j = L.length - 1; j >= pos - 1; --j)
    L.elem[j + 1] = L.elem[j]; //插入位置之后的元素右移
    L.elem[pos - 1] = e; //插入e
    ++L.length; //表长增1
    cout << "插入后的顺序表:";
    for (j = 0; j < L.length; j++)
    {
    cout << L.elem[j] << ' ';
    }
    cout << ' ';
    system("pause");
    }//ListInsert

    void ListDelete(SqList &L)
    {
    int j;
    int pos;
    cout << "请输入所要删除元素的位置: ";
    cin >> pos;
    //若1 <= pos <= Listlength(L).则在顺序表L中删除第pos个元素,输出删除后的顺序表
    if(pos < 1 || pos > L.length)
    {
    cout << "删除位置不合法 "; //删除位置不合法
    system("pause");
    return;
    }
    for(j = pos; j < L.length; ++j)
    L.elem[j - 1] = L.elem[j]; ///被删除元素之后的元素左移
    --L.length; //表长减1
    cout << "删除后的顺序表:";
    for (j = 0; j < L.length; j++)
    {
    cout << L.elem[j] << ' ';
    }
    cout << ' ';
    system("pause");
    }//ListDelete

    void DestroyList(SqList &L)
    {
    //释放顺序表L所占存储空间
    delete[] L.elem;
    L.listsize = 0;
    L.length = 0;
    cout << "顺序表已销毁" << ' ';
    system("pause");
    }//DestroyList_Sq

    void ListLength(SqList L)
    {
    cout << "表长为:" << L.length << ' ';
    system("pause");
    }

    void ListEmpty(SqList L)
    {
    if(L.length == 0)
    cout << "该顺序表为空" << ' ';
    else
    cout << "该顺序表不为空" << ' ';
    system("pause");
    }

    void GetElem(SqList L)
    {
    int j;
    cout << "取出顺序表元素的位置:";
    cin >> j;
    if(j < 1 || j > L.length)
    {
    cout << "取出位置不合法" << ' '; //取出位置不合法
    system("pause");
    return;
    }
    cout << "取出的元素为:" << L.elem[j - 1] << ' ';
    system("pause");
    }
    void MergeList_Sq()
    {
    //输入有序顺序表La,Lb.归并为Lc.输出Lc
    SqList La; SqList Lb; SqList Lc;
    int i, j, k; int maxsize;
    maxsize = MAXLISTSIZE;
    La.elem = new ElemType[maxsize];
    Lb.elem = new ElemType[maxsize];
    Lc.elem = new ElemType[maxsize];
    if(!La.elem || !Lb.elem || !Lc.elem) exit(1); //储存分配失败
    cout << "请输入顺序表La的长度: ";
    cin >> La.length;
    La.listsize = maxsize; //该顺序表可以存储元素的最大容量
    cout << "请输入顺序表的元素: ";
    for (j = 0; j < La.length; j++)
    {
    cin >> La.elem[j];
    }
    cout << "请输入顺序表Lb的长度: ";
    cin >> Lb.length;
    Lb.listsize = maxsize; //该顺序表可以存储元素的最大容量
    cout << "请输入顺序表的元素: ";
    for (j = 0; j < Lb.length; j++)
    {
    cin >> Lb.elem[j];
    }
    Lc.listsize = Lc.length = La.length + Lb.length;

    for(i = 0, j = 0, k = 0; i < La.length && j < Lb.length; k++)
    if(La.elem[i] <= Lb.elem[j])
    {
    Lc.elem[k] = La.elem[i];
    i++;
    }
    else
    {
    Lc.elem[k] = Lb.elem[j];
    j++;
    }
    while(i < La.length)
    {
    Lc.elem[k] = La.elem[i];
    i++, k++;
    } //插入La的剩余元素
    while(j < Lb.length)
    {
    Lc.elem[k] = Lb.elem[j];
    j++, k++;
    } //插入Lb的剩余元素
    cout << "合并后的顺序表Lc为:";
    for (j = 0; j < Lc.length; j++)
    {
    cout << Lc.elem[j] << ' ';
    }
    cout << ' ';
    system("pause");
    }//MergeList_Sq

  • 相关阅读:
    Oracle 11g SQL Fundamentals Training Introduction02
    Chapter 05Reporting Aggregated data Using the Group Functions 01
    Chapter 01Restriicting Data Using The SQL SELECT Statemnt01
    Oracle 11g SQL Fundamentals Training Introduction01
    Chapter 04Using Conversion Functions and Conditional ExpressionsConditional Expressions
    Unix时代的开创者Ken Thompson (zz.is2120.bg57iv3)
    我心目中计算机软件科学最小必读书目 (zz.is2120)
    北京将评估分时分区单双号限行 推进错时上下班 (zz)
    佳能G系列领军相机G1X
    选购单反相机的新建议——心民谈宾得K5(转)
  • 原文地址:https://www.cnblogs.com/wwttsqt/p/7783173.html
Copyright © 2011-2022 走看看