数据结构实验之顺序表----顺序表的基本操作

直接上干货:

一、实验目的

1、掌握线性表中元素的前驱、后继的概念。

2、掌握顺序表的建立、插入元素、删除表中某元素的算法。

3、对线性表相应算法的时间复杂度进行分析。

二、实验要求

1.实验前做好充分准备,包括复习第一章、第二章所学内容,事先预习好本次实验内容。

2.实验时记录实验结果,按要求完成各题。

3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。

三、实验内容

1. 完成并实现如下顺序表的基本操作。要求:编写测试函数运行程序,给出结果每个基本操作的运行截图。

(1)顺序表的定义

#include <stdio.h>

#include <malloc.h>

#include <assert.h>

#define InitSize 8      /*初始分配的顺序表长度*/

#define IncrSize 4      /*溢出时,顺序表长度的增量*/

typedef int ElemType;

typedef struct SeqList  //动态方式定义顺序表存储结构

{

    ElemType *data;     /*存储空间的基地址*/

    int length;         /*线性表中有效元素的长度*/

    int capacity;       //顺序表的容量

}SeqList;

(2)顺序表的基本操作:

void InitSeqList(SeqList *list);//初始化顺序表

代码:

void InitSeqList(SeqList *list)

{

    list->data = (ElemType*)malloc(sizeof(ElemType)* InitSize);

    list->length = 0;

    list->capacity = InitSize;

}

Int IncSeqList(SeqList *list);// 为顺序表增加存储空间

代码:

int IncSeqList(SeqList *list)

{

    list->capacity *=IncrSize;

    ElemType *p = malloc(sizeof(ElemType)* list->capacity);

    for(int i = 0; i < list->length; i++)

    {

        p[i] = list->data[i];

    }

    free(list->data);

    list->data = p;

}

void push_front(SeqList *list,ElemType x);//顺序表前端插入数据

代码:

void push_front(SeqList *list,ElemType x)

{

    if(list->length <= list->capacity)

        IncSeqList(list);

    list->length++;

    for(int i = list->length-2;i>0;i--)

    {

        list->data[i+1] = list->data[i];

    }

    list->data[0] = x;

}

运行截图:

void push_back(SeqList *list,ElemType x);//顺序表后端插入数据

代码:

void push_back(SeqList *list,ElemType x)

{

    if(list->length <= list->capacity)

        IncSeqList(list);

    list->length++;

    list->data[list->length] = x;

}

运行截图:

void ShowSeqList(SeqList *list);//显示数据

代码:

void ShowSeqList(SeqList *list)

{

    for(int i=0;i < list->length;i++)

        printf("%d",list->data[i]);

}

运行截图:

int Length(SeqList *list);//求顺序表长度

代码:

int Length(SeqList *list)

{

    return list->length;

}

运行截图:

void pop_front(SeqList *list);//前端删除元素

代码:

void pop_front(SeqList *list)

{

    for(int i=0;i<list->length-1;i++)

    {

        list->data[i] = list->data[i+1];

    }

    list->length--;

}

运行截图:

void pop_back(SeqList *list);//后端删除元素

代码:

void pop_back(SeqList *list)

{

    list->length--;

}

运行截图:

void InsertSeqList_pos(SeqList *list,int pos,ElemType key);//在顺序表中按照pos位置插入数据元素key

代码:

void InsertSeqList_pos(SeqList *list,int pos,ElemType key)

{

    if(pos < 1||pos>list->length)

    {

        return;

    }

    if(list->length>= list->capacity)

        IncSeqList(list);

    list->length++;

    for(int i = list->length;i >=pos;i--)

    {

        list->data[i]= list->data[i-1];

    }

    list->data[pos] = key;

}

运行截图:

void DeleteSeqList_pos(SeqList *list,int pos);//在顺序表中按照pos位置删除数据元素

代码:

void DeleteSeqList_pos(SeqList *list,int pos)

{

    for(int i = pos-1;i< list->length-1;i++)

    {

        list->data[i] = list->data[i+1];

    }

    list->length--;

}

运行截图:

int findSeqList_val(SeqList *list,ElemType key);/*在顺序表中查找值为key的元素位置*/

代码:

int findSeqList_val(SeqList *list,ElemType key)

{

    for(int i=0;i<list->length; i++)

    {

        if(list->data[i]==key)

            return i+1;

    }

    return 0;

}

运行截图:

void sortSeqList(SeqList *list);//排序

代码:

void sortSeqList(SeqList *list)

{

    for(int i =0;i<list->length;i++)

    {

        for(int j= list->length-1; j >i;j--)

        {

            if(list->data[j]<list->data[i-1])

            {

                ElemType temp = list->data[j];

                list->data[j] = list->data[j-1];

                list->data[j-1] = temp;

            }

        }

    }

}

运行截图:

void reverseList(SeqList *list);//逆置

代码:

void reverseList(SeqList *list)

{

    for(int i=0;i <list->length/2;i++)

    {

    ElemType temp = list->data[i];

    list->data[i] = list->data[list->length-1-i];

    list->data[list->length-i-1] = temp;

    }

}

运行截图:

void GetElem(SeqList *list,int pos,ElemType *elem);/*获取指定位置的元素,ingredients将元素存在elem所指空间的变量中*/ 

代码:

void GetElem(SeqList *list,int pos,ElemType *elem)

{

    *elem = list->data[pos-1];

}

运行截图:

void clearSeqList(SeqList *list);//清空顺序表

代码:

void clearSeqList(SeqList *list)

{

    list->length = 0;

}

运行截图:

void DestroySeqList(SeqList *list);//销毁

代码:

void DestroySeqList(SeqList *list)

{

    if(list->data !=NULL)

        free(list->data);

    list->length = 0;

}

运行截图:

#include <stdio.h>
#include <malloc.h>
#include <assert.h>

#define InitSize 8     /*鍒濆鍒嗛厤鐨勯『搴忚〃闀垮害*/
#define IncrSize 4     /*婧㈠嚭鏃讹紝椤哄簭琛ㄩ暱搴︾殑澧為噺*/
typedef int ElemType;

typedef struct SeqList  //鍔ㄦ€佹柟寮忓畾涔夐『搴忚〃瀛樺偍缁撴瀯
{
    ElemType *data; /*瀛樺偍绌洪棿鐨勫熀鍦板潃*/
    int length;   /*绾挎€ц〃涓湁鏁堝厓绱犵殑闀垮害*/
    int capacity; //椤哄簭琛ㄧ殑瀹归噺
}SeqList;

void InitSeqList(SeqList *list);//鍒濆鍖栭『搴忚〃

bool IncSeqList(SeqList *list);// 涓洪『搴忚〃澧炲姞瀛樺偍绌洪棿

void push_front(SeqList *list,ElemType x);//椤哄簭琛ㄥ墠绔彃鍏ユ暟鎹?

void push_back(SeqList *list,ElemType x);//椤哄簭琛ㄥ悗绔彃鍏ユ暟鎹?

void ShowSeqList(SeqList *list);//鏄剧ず鏁版嵁

int Length(SeqList *list);//姹傞『搴忚〃闀垮害

void pop_front(SeqList *list);//鍓嶇鍒犻櫎鍏冪礌

void pop_back(SeqList *list);//鍚庣鍒犻櫎鍏冪礌

void InsertSeqList_pos(SeqList *list,int pos,ElemType key);//鍦ㄩ『搴忚〃涓寜鐓os浣嶇疆鎻掑叆鏁版嵁鍏冪礌key

void DeleteSeqList_pos(SeqList *list,int pos);//鍦ㄩ『搴忚〃涓寜鐓os浣嶇疆鍒犻櫎鏁版嵁鍏冪礌

int findSeqList_val(SeqList *list,ElemType key);/*鍦ㄩ『搴忚〃涓煡鎵惧€间负key鐨勫厓绱犱綅缃?/

void sortSeqList(SeqList *list);//鎺掑簭

void reverseList(SeqList *list);//閫嗙疆

void GetElem(SeqList *list,int pos,ElemType *elem);/*鑾峰彇鎸囧畾浣嶇疆鐨勫厓绱狅紝ingredients灏嗗厓绱犲瓨鍦╡lem鎵€鎸囩┖闂寸殑鍙橀噺涓?/

void clearSeqList(SeqList *list);//娓呯┖椤哄簭琛紱

void DestroySeqList(SeqList *list);//閿€姣?
#include "SeqList.h"

void InitSeqList(SeqList *list)
{

}

bool IncSeqList(SeqList *list)
{

}

void push_front(SeqList *list,ElemType x)
{

}

void push_back(SeqList *list,ElemType x)
{

}

void ShowSeqList(SeqList *list)
{

}

int Length(SeqList *list)
{

}

void pop_front(SeqList *list)
{

}

void pop_back(SeqList *list)
{

}

void InsertSeqList_pos(SeqList *list,int pos,ElemType key)
{

}

void DeleteSeqList_pos(SeqList *list,int pos)
{

}

int findSeqList_val(SeqList *list,ElemType key)
{

}

void sortSeqList(SeqList *list)
{

}

void reverseList(SeqList *list)
{

}

void GetElem(SeqList *list,int pos,ElemType *elem)
{

}

void clearSeqList(SeqList *list)
{

}

void DestroySeqList(SeqList *list)
{

}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

善程序员文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值