目录
一、实验名称和性质
所属课程 | 数据结构与算法 |
实验名称 | 顺序表的操作 |
实验学时 | 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;
}