顺序表的建立及基本操作

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东师范大学

实验报告

课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达

学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算

一、实验目的和要求

(1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。

(2)掌握线性表的顺序存储结构的定义及基本运算

二、实验环境

Windows10,Visual Studio 2017

三、实验内容及实施

实验内容

1、建立一个顺序表,输入n个元素并输出;

2、查找线性表中的最大元素并输出;

3、在线性表的第i个元素前插入一个正整数x;

4、删除线性表中的第j个元素;

5、将线性表中的元素按升序排列;

【程序流程图】

【程序】

#include

#include

using namespace std;

#define MAXSIZE 100

#define OK 1

#define ERROR 0

#define OVERFLOW -2

typedef struct { //定义顺序表结构

int data[MAXSIZE]; //存储空间的基地址;

int length; //当前表长

}SqList;

int InitList(SqList &L) //初始化顺序表

{

L.length = 0; //当前长度为0

return OK;

}

void ShowList(SqList &L) //显示顺序表

{

cout << "您构建的顺序表为:" << endl; //提示int i;

for (i = 0; i < L.length; i++)

{

cout << L.data[i] << " ";

} //依次输出顺序表

cout << endl;

}

void FindMax(SqList &L) //找最大值

{

cout << "该组数据的最大值为:" << endl;

int m = L.data[0];

int i;

for (i = 0; i < L.length; i++) //依次比较两个数的大小,取大者赋给m {

if (m < L.data[i])

{

m = L.data[i];

}

}

cout << m << endl; //输出最大值

}

int InsertList(SqList &L) //插入新数字

{

int x, e;

cout << "请问您要在第__个数字前插入新数字?"; //提示

cin >> x; //输入要插入的位置

if (x<1 || x>L.length)

{

cout << "该值错!" << endl;

} //位置错误提示

if (L.length == MAXSIZE)

{

cout << "该顺序表空间已满,不能再添加数值!" << endl;

return OVERFLOW;

} //存储空间已满提示

cout << "您要插入的数字为:" << endl;

cin >> e; //输入要插入的数字

for (int j = L.length - 1; j >= x - 1; j--)

L.data[j + 1] = L.data[j]; //从要插入的位置起,后面数据依次向后移动L.data[x - 1] = e; //插入新数字

L.length++; //表长+1

cout << "插入新数字之后的顺序表为:" << endl; //提示

ShowList(L); //输出新表

return OK;

}

int DeleteElem(SqList &L) //删除某个元素

{

int x;

cout << "请问您要删除第__个元素?"; //提示

cin >> x; //输入要删除第几个数字

if (x<1 || x>L.length)

{

cout << "该值错!" << endl;

} //错误提示

for (int j = x - 1; j < L.length - 1; j++)

L.data[j] = L.data[j + 1]; //从该位置起,以后数字依次向前移动

L.length--; //表长-1

cout << "删除数字之后的顺序表为:" << endl; //提示

ShowList(L); //输出新表

return OK;

}

void UpRankList(SqList &L) //升序排列顺序表

{

int i, j, temp;

for (j = 0; j

{

for (i = 0; i < L.length - 1 - j; i++) //每趟冒泡比较两个数字,共比较表长-趟数次{

if (L.data[i] > L.data[i + 1]) //将两者较大者移到后边

{

temp = L.data[i];

L.data[i] = L.data[i + 1];

L.data[i + 1] = temp;

}

}

相关文档
最新文档