顺序表的操作实验

目录

一、实验名称和性质

二、实验目的

三、实验内容

四、知识准备

五、实验要求

六、代码


一、实验名称和性质

所属课程

数据结构与算法

实验名称

顺序表的操作

实验学时

2

实验性质

√验证 □综合 □设计

必做/选做

√必做 □选做

二、实验目的

1.掌握线性表的顺序存储结构的表示和实现方法。

2.掌握顺序表基本操作的算法实现。

3.了解顺序表的应用。

三、实验内容

1.建立含n个数据元素的顺序表并输出该表中各元素的值。

2.在有序顺序表L中插入元素x使线性表仍然有序。

3.写一个函数删除有序顺序表中的重复元素。

四、知识准备

前期要求熟练掌握了C语言的编程规则、方法和顺序表的基本操作算法。

五、实验要求

编程实现如下功能:

(1)根据输入顺序表的长度n和各个数据元素值建立一个顺序表,输出顺序表中各元素值,对比是否操作成功。

(2)根据输入的n个非递减的有序数据建立一个有序顺序表,并输出有序顺序表中各元素值。在有序顺序表L中插入一个值为x的元素使得插入后顺序表仍然有序,输出插入后的顺序表中各元素值。

(3)删除有序顺序表中重复的元素,并输出删除后的顺序表中各元素值

六、代码

#include<stdio.h>
#include<stdlib.h>
 
#define MAXSIZE 20  //线性表存储空间的初始分配量
#define OK 1    //成功标识
#define ERROR 0 //失败标识
 
typedef int Status;	//Status是函数的类型,其值是函数结果状态代码,如OK等
 
typedef int ElemType;   //ElemType的类型根据实际情况而定
//顺序表数据结构
typedef struct
{
    ElemType *elem;
    int length;
}SqList;

Status InitList(SqList* L)//初始化 
{
    //构造一个空的线性表L
    L -> elem = (ElemType *)malloc(MAXSIZE*sizeof(ElemType));
    if(!L -> elem){
        return ERROR;
    }
    L -> length = 0;
    return OK;
}
void OutPut(SqList L)//输出所有元素 
{ 
    printf("当前顺序表的长度:%d\n", L.length);
    for(int i = 0; i < L.length; i++){
        printf("%d ",L.elem[i]);
    }
    printf("\n");
}

Status ListInsert(SqList *L, ElemType e){
    int k=L->length;
    int i;
    if (L->length == MAXSIZE){  //线性表没有剩余空间
        return ERROR;
    }
    if(k==0)
    {
    	L->elem [k]=e;
    	L->length++;
    	return OK;
	}
	
    for(k=k-1;L->elem [k]>e;k--){
        L->elem [k+1]=L->elem [k];
    }   
    L->elem[k+1] = e;   //将新元素插入
    L->length++;    //长度加1
    return OK;
}

Status ListDelete(SqList *L){//删除相同元素 
    if(L->length == 0){   //线性表为空
        return ERROR;
    }
    for(int i=0;i<L->length-1;i++)//外循环找相同元素 
    {
    	if(L->elem [i]==L->elem [i+1])
    	{
    		L->length --;
    		for(int k=i;k<L->length ;k++)//内循环移位 
    		L->elem[k] = L->elem[k+1];//覆盖相同元素 
		}
	}
    return OK;
}

int main()
{
	SqList L;
	InitList(&L);
	for(int i=1;i<=10;i++)
	{
		ListInsert(&L,i);
	}
	OutPut(L);
	//插入一个元素
	ListInsert(&L,4);
	OutPut(L);
	//删除重复元素
	ListDelete(&L);
	OutPut(L);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值