线性表之顺序表操作(未完待续)

转载 2018年04月16日 18:12:14

考研408数据结构线性表复习

#include<iostream>
#include<algorithm>

const int initlength = 100;     ///顺序表的初始长度

using namespace std;

typedef struct
{
    int *data;
    int MaxSize, length;        ///顺序表的最大存储空间,长度;
}SeqList;


///*****顺序表基本操作

void initList(SeqList &L, int n = initlength)       ///初始化顺序表
{
    L.data = new int [n];
    L.length = 0;
    L.MaxSize = n;
    for(int i=0;i<L.MaxSize;++i)
    {
        cin>>L.data[i];
        L.length++;
    }
}

int Length(SeqList L)           ///返回顺序表的长度
{
    return L.length;
}

bool EmptyList(SeqList L)          ///判断顺序表是否为空
{
    if(L.length == 0)
        return true;
    return false;
}

bool ListInsert(SeqList &L, int i, int value)           ///插入元素, i为元素的位置, value为元素的值
{
    if(i<1 || i>L.length+1)
        return false;
    if(i >= L.MaxSize)
        return false;
    for(int j=L.length; j>=i; --j)
        L.data[j] = L.data[j-1];
    L.data[i-1] = value;
    L.length++;
    return true;
}

bool ListDelete(SeqList &L, int i, int &e)          ///删除元素, i为删除元素的位置, e为删除位置元素的值
{
    if(i<1 || i>L.length)
        return false;
    e = L.data[i-1];
    for(int j=i-1; j<L.length-1; ++j)
        L.data[j] = L.data[j+1];
    L.length--;
    return true;
}

int LocateElem(SeqList L, int e)                ///按值查找第一个元素值为e的位序
{
    for(int i=0; i<L.length; ++i)
    {
        if(e == L.data[i])
            return i+1;
    }
    return 0;
}


void PrintList(SeqList L)           ///打印输出整个顺序表
{
    for(int i=0;i<L.length;++i)
        cout<<L.data[i]<<" ";
    cout<<endl;
}


///***顺序表进阶操作,带题目描述

///1.在顺序表中删除具有最小值的元素(假设唯一), 并由函数返回被删元素的值
///         空出的位置由最后一个元素填补。若顺序表为空,显示错误信息并退出

bool DeleteMinList(SeqList &L, int &e)
{
    if(EmptyList(L))    //if (L.length == 0)
    {
        cout<<"The List is empty, can't delete the min value!"<<endl;
        return false;
    }
    int ListMin = L.data[0];
    int LocalMin = 0;
    for(int i=0;i<L.length;++i)
    {
        if(ListMin > L.data[i])
        {
            ListMin = L.data[i];
            LocalMin = i;
        }
    }
    e = ListMin;
    L.data[LocalMin] = L.data[L.length-1];
    L.length--;
    return true;
}

///设计一个高效算法,将顺序表的所有元素逆置,要求算法的空间复杂度为O(1)
void ReverseList(SeqList &L)
{
    int temp;
    for(int i=0;i<L.length/2;++i)
    {
        temp = L.data[i];
        L.data[i] = L.data[L.length-i-1];
        L.data[L.length-i-1] = temp;
    }
}

///长度为n的顺序表L, 编写一个时间复杂度为O(n), 空间复杂度为O(1), 该算法删除线性表中所有值为x的数据元素。
///可为该顺序表重新构造

void DeleteEqualElement(SeqList &L, int x)
{
    int k = 0;
    for(int i=0; i<L.length; ++i)
    {
        if(L.data[i] != x)
        {
            L.data[k] = L.data[i];
            k++;
        }
    }
    L.length = k;
}

///或者第二种算法
/*
void DeleteEqualElement(SeqList &L, int x)
{
    int k=0, i=0;
    while(i<L.length)
    {
        if(L.data[i] == x)
            k++;
        else
            L.data[i-k] = L.data[i];
        i++;
    }
    L.length -= k;
}
*/

int main()
{
    ios::sync_with_stdio(false);
    SeqList L;
    int n;
    cin>>n;
    initList(L, n);
    ListInsert(L, 5, 8);
    PrintList(L);
    cout<<"The List Length is "<<Length(L)<<endl;
    int e;
    ListDelete(L, 5, e);
    PrintList(L);
    cout<<"e's value is "<<e<<endl;
    cout<<"The List Length is "<<Length(L)<<endl;
    int order = LocateElem(L, 6);
    if(order != 0)
        cout<<"The element's order is "<<order<<endl;
    else
        cout<<"sorry, we can't find the value's order!!!"<<endl;
    DeleteMinList(L, e);
    PrintList(L);
    cout<<"e's value is "<<e<<endl;
    ReverseList(L);
    PrintList(L);
    return 0;
}

C++数据结构之线性顺序表基本操作

#include using namespace std; #define MAX_SIZE 20 typedef int ElemType; typedef struct {  ElemType ...
  • u014687749
  • u014687749
  • 2015-04-25 20:08:47
  • 722

线性表之顺序表 源代码

线性表概述 线性表是最基本、最简单、也是最常用的一种数据结构。在线性表中数据元素之间的关系是线性,数据元素可以看成是排列在一条线上或一个环上。 线性表分为静态线性表和动态线性表,常见的有顺序表(静态的...
  • Holyang_1013197377
  • Holyang_1013197377
  • 2014-09-13 23:21:21
  • 2821

数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化

线性表(List)是最常见的也是最简单的一种数据结构。线性表的抽象数据类型,线性表的顺序存储结构——顺序表,顺序表的基本操作插入、删除、遍历等。...
  • xiao_K_ruo_feng
  • xiao_K_ruo_feng
  • 2017-04-16 10:15:19
  • 1885

线性表--顺序表及链表

本文包含以下内容: 一、线性表的介绍以及抽象ADT 二、顺序表及顺序表的实现 三、链表及链表的实现 四、顺序表和链表的比较 五、总结 参考书目:《数据结构与算法分析》【美】Clifford A.S...
  • bujuan827
  • bujuan827
  • 2016-08-15 07:24:53
  • 725

线性表——顺序表——时间复杂度计算

数据结构的核心思想是通过数据结构的思维来优化代码的算法,以此来提升程序的执行性能,缩短程序执行的时间。下面我来举两个例子,以此来说明数据结构的时间复杂度计算问题。...
  • ZZY1078689276
  • ZZY1078689276
  • 2017-09-13 09:38:55
  • 1113

实验一 线性表的顺序存储实验

  • 2011年11月22日 20:10
  • 28KB
  • 下载

创建学生成绩顺序表---

一、实验目的 巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。 二、实验内容 建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学...
  • ChanYCccc
  • ChanYCccc
  • 2017-10-12 08:31:51
  • 281

线性表之顺序表 图解和代码实现

线性表的顺序存储结构称为顺序表。   图解:     下面来看下顺序表的C++实现: SeqList.h文件 [cpp] view plaincopy ...
  • tangzhilinhk
  • tangzhilinhk
  • 2014-11-18 10:11:26
  • 368

数据结构(1)--线性表顺序表的主要操作的实现

参考书籍:数据结构(C语言版) 严蔚敏 吴伟民编著 清华大学出版社 1.基本定义 #include //顺序表:1.使用动态分配的一维数组 // 2.使用静态分配的一维数组 //本实例使...
  • u010366748
  • u010366748
  • 2016-02-04 03:13:47
  • 7013

线性表的应用1(顺序表的遍历和查找)

已知顺序表L中的数据类型为整型。设计算法将其调整为左右两部分,左边的元素(即排在前面的)均为奇数,右边所有元素(即排在后面的)均为偶数,并要求算法的时间复杂度为O(n),空间复杂度为O(1)。 由于顺...
  • PNAN222
  • PNAN222
  • 2016-04-05 17:35:52
  • 1187
收藏助手
不良信息举报
您举报文章:线性表之顺序表操作(未完待续)
举报原因:
原因补充:

(最多只允许输入30个字)