顺序表(代码编写)

        代码编写流程,请看顺序表的概念篇,以下代码全部使用c++编写。讲解了对顺序表的增删改查。以及功能测试

#include "iostream"


using namespace std;


#define eleType int

struct SequentialList
{
    /* data */
    eleType* elements;
    int size;
    int capacity;
};


/*初始化*/
void InitSequentialList(struct SequentialList* list,int capacity)
{
    list->elements = new eleType[capacity];
    list->size = 0;
    list->capacity = capacity;
}

/*销毁*/
void destory(struct SequentialList* list)
{
    delete [] list->elements;
}

/*获取大小*/

/*是否为空*/
bool isEmpty(struct SequentialList* list)
{
    return list->size == 0;
}

/*插入*/
void insert(struct SequentialList* list,int index,eleType element)
{
    /* 1.输入参数是否合法
    *2.空间不够扩展空间
    *3.插入数据,从后向前移动数据,之道index,将index替换成element,size++
    */

   if(index < 0 || index>list->size)
   {
    std::invalid_argument("invaid index");
   }

   if(list->size == list->capacity)
   {
    int newCapacity = list->capacity*2;
    eleType* Newelemnt = new eleType[newCapacity];

    for(int i = 0; i < list->size; i++)
    {
        Newelemnt[i] = list->elements[i];
    }
    delete [] list->elements;
    list->elements = Newelemnt;
    list->capacity = newCapacity;
   }

    for(int i = list->size;i>index;i--)
    {
        list->elements[i] = list->elements[i-1];
    }

    list->elements[index] = element;
    list->size++;
}
int size(struct SequentialList* list)
{
    return list->size;
}
/*删除元素*/
void deleteElement(struct SequentialList* list,int index)
{
   if(index < 0 || index>=list->size)
   {
    std::invalid_argument("invaid index");
   }    

   for(int i = index;i<list->size;i++)
   {
    list->elements[i] = list->elements[i+1];
   }

   list->size--;
}


/*查找元素的下标*/
int findElement(struct SequentialList* list,eleType element)
{
    for(int i = 0;i< list->size;i++)
    {
        if(element == list->elements[i])
        {
            return i;
        }
    }

    return -1;
}

/*获取输入索引的元素*/
int getElement(struct SequentialList* list,eleType index)
{
    if(index < 0 || index>=list->size)
   {
    std::invalid_argument("invaid index");
   }  

    return list->elements[index];
}

/*更新指定索引的值*/
void updataElement(struct SequentialList* list,eleType index,int value)
{
     if(index < 0 || index>=list->size)
   {
    std::invalid_argument("invaid index");
   }  
   list->elements[index] = value;   
}

int main()
{
    struct SequentialList mylist;


    InitSequentialList(&mylist,10);

    for(int i = 0;i < 10;i++)
    {
        insert(&mylist,i,i*10);
    }
    for(int i = 0;i < size(&mylist);i++)
    { 
        cout << getElement(&mylist,i) << " ";
    } 
	
	cout << findElement(&mylist,20) << endl;

	
    updataElement(&mylist,2,1314);
    for(int i = 0;i < size(&mylist);i++)
    { 
        cout << getElement(&mylist,i) << " ";
    } 

    deleteElement(&mylist,2);
     for(int i = 0;i < size(&mylist);i++)
    { 
        cout << getElement(&mylist,i) << " ";
    } 
       
    return 0;
}








 

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值