实验一-顺序表的基本操作

更新时间:2023-12-09 13:01:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 顺序表的基本操作

一、实验目的

1.掌握顺序表及其基本操作的实现。

2.掌握利用VC/TC实现数据结构的编程方法。

3.通过上机实践进一步加深对线性表的顺序存储方式理解。 4.通过上机实践加强利用数据结构解决实际应用问题的能力。 二、实验要求

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

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

3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。 三、实验内容与要求

实验题目:顺序表的定义及其相关操作算法的实现

要求:编程实现顺序表的类型定义及顺序表的初始化操作、插入操作、删除操作、取元素操作、输出操作等,并对其进行验证。 四、实验程序示例

1、顺序表实验程序示例 #include \#include \

/*-------------(1)预定义常量及类型-----------------*/ #define OK 1 #define ERROR 0

#define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status;

/*-------(2)顺序表类型及其基本操作函数的定义---------*/ #define InitSize 100 #define INCR 20

typedef int ElemType; /*定义元素类型为int类型*/

typedef struct

{ ElemType *Elem; int Length; int ListSize;

}SqList; /*SqList类型为顺序表类型*/

Status InitList_sq(SqList *L) /*初始化操作函数定义*/

{ L->Elem=(ElemType*)malloc(InitSize*sizeof(ElemType));

if (!(L->Elem))return(OVERFLOW); L->Length=0; L->ListSize=InitSize; return OK; }

Status ListInsert_sq(SqList *L, int i, ElemType e) /*插入操作函数定义*/ {

/* 写出你的代码 */ }

Status ListDelete_sq(SqList *L, int i) /*删除第i 个位置的元素 */ {

/* 写出你的代码 */ }

Status LocateElem(SqList *L, ElemType e) /*查找值为e的元素的位置 */ {

/* 写出你的代码 */ }

/* 以下为选作的 */ /*

void exchange ( SqList *L,int m ,int n) // 本算法实现顺序表中前 m 个元素和后 n 个元素的互换

void purge(SqList *L ) // 删除顺序表 L 中冗余元素 void ReverseSeqList(SqList &L) //倒置

void MergeList(SqList la,SqList lb,Sqlist &lc)//有数据类型为整型顺序表La和Lb,其元素均按从小到大升序排列,编写一个算法将它们合并成一个表Lc,且Lc的元素也是按升序排列。 */

void ListOutput_sq(SqList L)/*顺序表输出操作*/ { int i;

for(i=0;i<=L.Length-1;i++) printf(\ printf(\}

/*其它操作如删除、查找、判空等操作略*/ /*-------------(3)主函数定义--------------------*/ main()

{ SqList La;

int i,c;

InitList_sq(&La);

printf(\

scanf(\

printf(\

printf(\ for (i=0;i

printf(\ ListOutput_sq(La);

printf(\ ListInsert_sq(&La,1,999); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,4,888); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,La.Length+1,111); ListOutput_sq(La);

printf(\ ListDelete_sq(&La, i); ListOutput_sq(La);

printf(\ LocateElem(&La, 888); ListOutput_sq(La); getch(); }

五、实验小结

1、上机测试程序,写出运行结果。 2、整理实验结果,小结实验心得体会

#include \#include \

/*-------------(1)预定义常量及类型-----------------*/ #define OK 1 #define ERROR 0

#define OVERFLOW -2 #define TRUE 1 #define FALSE 0 typedef int Status;

/*-------(2)顺序表类型及其基本操作函数的定义---------*/ #define InitSize 100 #define INCR 20

typedef int ElemType; /*定义元素类型为int类型*/

typedef struct

{ ElemType *Elem; int Length; int ListSize;

}SqList; /*SqList类型为顺序表类型*/

Status InitList_sq(SqList *L) /*初始化操作函数定义*/

{ L->Elem=(ElemType*)malloc(InitSize*sizeof(ElemType)); if (!(L->Elem))return(OVERFLOW); L->Length=0; L->ListSize=InitSize; return OK; }

Status ListInsert_sq(SqList *L, int i, ElemType e) /*插入操作函数定义*/ {

int j;

ElemType *newaddress;

if (i<1||i>L->Length+1) return ERROR; if (L->Length>=L->ListSize){

newaddress=(ElemType*)realloc(L->Elem,(L->ListSize+INCR)*sizeof(ElemType)); if(!newaddress)exit(OVERFLOW); L->Elem=newaddress; L->ListSize+=INCR; }

for (j=L->Length;j>=i;j--)

L->Elem[j]=L->Elem[j-1]; L->Elem[j]=e; L->Length++; }

Status ListDelete_sq(SqList *L, int i) /*删除第i 个位置的元素 */ { int j;

if((i<1)||(i>L->Length)) return ERROR; for(j=i;j<=L->Length-1;j++) L->Elem[j-1]=L->Elem[j];

L->Length--; }

Status LocateElem(SqList *L, int e) /*查找值为e的元素的位置 */ { int i=0;

ElemType *p; p=L->Elem;

while(i<=L->Length&&*p++!=e) i++;

if (i <= L->Length) return i; else return 0; }

/* 以下为选作的 */ /*

void exchange ( SqList *L,int m ,int n) // 本算法实现顺序表中前 m 个元素和后 n 个元素的互换

void purge(SqList *L ) // 删除顺序表 L 中冗余元素 void ReverseSeqList(SqList &L) //倒置

void MergeList(SqList la,SqList lb,Sqlist &lc)// 有数据类型为整型顺序表La和Lb,其元素均按从小到大升序排列,编写一个算法将它们合并成一个表Lc,且Lc的元素也是按升序排列。 */

void ListOutput_sq(SqList L)/*顺序表输出操作*/ { int i;

for(i=0;i<=L.Length-1;i++) printf(\ printf(\}

/*其它操作如删除、查找、判空等操作略*/ /*-------------(3)主函数定义--------------------*/ main()

{ SqList La; int i,c,f;

InitList_sq(&La);

printf(\

scanf(\

printf(\

printf(\ for (i=0;i

printf(\ ListOutput_sq(La);

printf(\ ListInsert_sq(&La,1,999); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,4,888); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,La.Length+1,111); ListOutput_sq(La);

printf(\ ListDelete_sq(&La, 3); ListOutput_sq(La);

printf(\ f=LocateElem(&La, 888); printf(\ getch(); }

printf(\ ListOutput_sq(La);

printf(\ ListInsert_sq(&La,1,999); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,4,888); ListOutput_sq(La);

printf(\ ListInsert_sq(&La,La.Length+1,111); ListOutput_sq(La);

printf(\ ListDelete_sq(&La, 3); ListOutput_sq(La);

printf(\ f=LocateElem(&La, 888); printf(\ getch(); }

本文来源:https://www.bwwdw.com/article/ucc5.html

Top