zoukankan      html  css  js  c++  java
  • C++编程练习(1)----“实现简单的线性表的顺序存储结构“

    线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

    故可以用数组来实现顺序存储结构。

    用C++编写的利用数组实现简单的读取、插入和删除功能的线性表。

    #include<iostream>
    #define MAXSIZE 20
    #define OK 1
    #define ERROR 0
    #define TURE 1
    #define FALSE 0
    typedef int Status;
    typedef int ElemType;
    class SqList{
    public:
    	SqList():length(1) {
    		for (int x=0;x<MAXSIZE;x++)
    			data[x]=0;
    	}
    	ElemType data[MAXSIZE];
    	int length;
    	Status ShowElem() const;
    	Status GetElem(int i, ElemType *e) ;
    	Status ListInsert(int i,ElemType e);
    	Status ListDelete(int i,ElemType *e);
    };
    Status SqList::ShowElem() const
    {
    	int k;
    	if (length==0)
    		return ERROR;
    	std::cout<<"当前线性表内容为:"<<std::endl;
    	for (k=1;k<=length;k++)
    		std::cout<<data[k-1]<<" 、 ";
    	std::cout<<std::endl;
    	return OK;
    }
    
    Status SqList::GetElem(int i,ElemType *e) 
    {
    	if (length==0 || i<1 || i>length)
    		return ERROR;
    	*e=data[i-1];
    	return OK;
    }
    
    Status SqList::ListInsert(int i,ElemType e) 
    {
    	int k;
    	if (length==MAXSIZE)
    		return ERROR;
    	if (i<1 || i>length)
    		return ERROR;
    	if (i<=length)
    	{
    		for (k=length-1;k>=i-1;k--)
    			data[k+1]=data[k];
    	}
    	data[i-1]=e;
    	length++;
    	return OK;
    }
    
    Status SqList::ListDelete(int i,ElemType *e)
    {
    	int k;
    	if (length==0)
    		return ERROR;
    	if (i<1 || i>length)
    		return ERROR;
    	*e=data[i-1];
    	if (i<length)
    	{
    		for (k=i-1;k<=length-1;k++)
    			data[k]=data[k+1];
    	}
    	length--;
    	return OK;
    }

    线性表顺序存储结构的优缺点:

    一、优点

    1、在存、读数据时,不管是哪个位置,时间复杂度都是O(1)。

    2、无须为表示表中元素之间的逻辑关系而增加额外的存储空间。

    二、缺点

    1、插入和删除时,需要移动大量元素,时间复杂度都是O(n)。

    2、当线性表长度变化较大时,难以确定存储空间的容量。

    3、造成存储空间的“碎片”。

  • 相关阅读:
    你应该掌握的——树和二叉树
    nyist oj 63(二叉树)
    非递归遍历二叉树的四种策略先序、中序、后序和层序
    学习的四种境界
    nyist oj 467 (中缀式变后缀式)
    二叉平衡树
    nyist OJ 35 (表达式求值)
    线索二叉树
    二叉树的三种遍历方法(递归和非递归)
    算法学习之路
  • 原文地址:https://www.cnblogs.com/fengty90/p/3768862.html
Copyright © 2011-2022 走看看