当前位置:文档之家› 顺序表的建立及其基本操作技巧

顺序表的建立及其基本操作技巧

山东师范大学
实验报告
课程:数据结构班级:2016级通信2班实验序号: 1 姓名:韩明达
学号: 201611030230 实验日期:9.17 题目: 顺序表的建立和运算
一、实验目的和要求
(1)熟悉C语言的上机环境,进一步掌握C语言的结构特点。

(2)掌握线性表的顺序存储结构的定义及基本运算
二、实验环境
Windows10,Visual Studio 2017
三、实验内容及实施
实验内容
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
【程序流程图】
【程序】
#include<stdio.h>
#include<iostream>
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<L.length - 1; j++) //进行表长-1 趟冒泡
{
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;
}
}
}
cout << "该数组按升序排列后为:" << endl; //提示
ShowList(L); //输出新表
}
int main()
{
SqList L; //定义顺序表L
InitList(L); //初始化L
cout << "请输入要输入的数字的个数:" << " ";
cin >> L.length; //输入表长
cout << "请输入要输入的数字,并用空格隔开:" << endl;
int i;
for (i = 0; i < L.length; i++)
{
cin >> L.data[i];
} //依次输入顺序表各个元素
cout << "请输入下列选项前的字母对该数组进行相应操作。

" << endl << "A.显示出该顺序表" << endl
<< "B.找出该组数中的最大值" << endl
<< "C.在该顺序表中插入新数据" << endl
<< "D.删除某个数据" << endl
<< "E.将该顺序表按生序排列" << endl; //提示
char choice;
do //主菜单
{
cin >> choice;
switch (choice)
{
case 'A': ShowList(L); break;
case 'B': FindMax(L); break;
case 'C': InsertList(L); break;
case 'D': DeleteElem(L); break;
case 'E': UpRankList(L); break;
default:;
}
} while ((choice = 'A') && (choice = 'B') && (choice = 'C') && (choice = 'D') && (choice = 'E'));
system("pause");
return 0;
}
四、实验结果 (程序的执行结果)
五、实验讨论(可选)。

相关主题