顺序表复习及应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用的头文件包含语句:
• • • • #include <iostream.h> //包含cout,cin,cerr函数的说明 #include <stdlib.h> //包含exit,rand等函数的说明 #include <iomanip.h> //包含setw等函数的说明 #include <string.h> //包含所有字符串函数的说明,如 //strcmp函数 • #include <fstream.h> //包含对文件操作函数的说明,如 //ifstream,ofstream,fstream
case 2:
//在表中查找元素
ElemBaidu Nhomakorabeaype x;
cout<<"请输入您想查找的数字:"; cin>>x;
if(FindList(a,x))
cout<<"恭喜!找到元素"<<x<<endl; else cout<<"Sorry!未找到元素"<<x<<endl; break; case 3: //插入元素,这块还可以分三种情况供选择 cout<<"请输入您想插入的数字:"; cin>>x; InsertList(a,x,-1); break;
L.size=i;
} L.list[i]=x; i++; cin>>x; } L.size=i; cout<<"恭喜!新建表完成!您的表中有"<<L.size<<"个元素!"<<endl; }
• 1)线性表是具有n(n>=0)个元素的一个有限序 列,当n=0时称为空表,用一对空括号表示;当 n>0时可表示为(a1,a2,…,an ) ,其中a1称为表头 元素,an称为表尾元素,ai-1称为ai(i>=2)的直 接前驱,ai+1称为ai(i<=n-1)的直接后继。 • 2)线性表的逻辑结构是线性结构,元素之间是1 对1的关系,即除表头元素外,每个元素(结点) 有且只有一个前驱,除表尾元素外,每个元素有 且只有一个后驱,当表中只有一个元素a1时,它 既没有前驱元素也没有后继元素。
void main(void)
{
List a; InitList(a);
int choose,mark=1;
while(mark) { cout<<"欢迎您使用×××的数字顺序表游戏!"<<endl; cout<<"请选择:"<<endl; cout<<"1. 新建数字顺序表"<<endl; cout<<"2. 查找某数是否在表中"<<endl; cout<<"3. 插入一个数字到表中"<<endl; cout<<"4. 删除表中某数"<<endl; cout<<"5. 给数字顺序表排序"<<endl; //mark为真时执行循环体
更进一步的,我们还可以建立一个友好的用户界面
要求:程序运行后,屏幕显示: 欢迎您使用×××的数字顺序表游戏! 请选择: 1. 新建数字顺序表 2. 查找某数是否在表中
3. 插入一个数字到表中
4. 删除表中某数 5. 给数字顺序表排序
6. 屏幕输出整个表
7. 不想玩了,拜拜! 输入您的选择:
当用户输入1~7内的某数时,执行相应操作,否则提示“请重新选择(1~7):”
ElemType temp; if(DeleteList(a,temp,1)) //删除a的表头元素,并由temp带回 cout<<"成功删除表头元素"<<temp<<endl;
ElemType delitem; cout<<"请输入要删除的数字:"<<endl; cin>>delitem;
if(DeleteList(a,delitem,0))
cout<<"6. 屏幕输出整个表"<<endl;
cout<<"7. 不想玩了,拜拜!"<<endl; cout<<"输入您的选择:"; cin>>choose;
while(choose<1||choose>7){
cout<<"请重新选择(1~7):"; cin>>choose; } cout<<endl; switch(choose) { case 1: //从键盘输入元素新建表 CreatLize(a); break; //跳出switch循环
int asize; asize=LenthList(a); //求表a的长度,也可以用asize=a.size; cout<<asize<<endl;
ElemType item; item=GetList(a,5); //item得到表a中第5个元素的值 cout<<"顺序表a中的第5个元素为"<<item<<endl;
BACK
基本操作包括:
初始化表(InitList),清空表(ClearList) 求表长(LenthList),判表空(EmptyList), 读表元(GetList),遍历输出表(TraverseList) 按值查找(FindList),修改表元(UpdateList) 插入(InsertList),删除(DeleteList), 按值排序(SortList)。
void main()
{
List a; InitList(a); //定义一个顺序表a //调用InitList函数,初始化顺序表a
InsertList(a,30,-1); //调用InsertList函数,把元素30插入到表尾
InsertList(a,50,1); //调用InsertList函数,把元素50插入到表头 int b[4]={5,8,12,15}; int i; for(i=0;i<4;i++) InsertList(a,b[i],-1); //依次把数组b中的每个元素插入到表尾 for(i=0;i<4;i++) InsertList(a,b[i],1); //依次把数组b中的每个元素插入到表头 TraverseList(a); //输出a,此时a=(15,12,8,5,50,30,5,8,12,15)
int size; };
(顺序表各项操作的函数定义,即书上部分)
void main() {定义一个顺序表并对它操作,即调用各函数}
可以把所有对顺序表各项操作的函数定义部分合在一起,放在用 户自定义的一个头文件中。
头文件是指后缀名为.h的文件,创建方法为:在VC6.0菜单中选择 新建->文件->C/C++ Header File->选择路径并输入文件名(例如 取名为list,默认扩展名为.h)->然后可以在打开的文件中输入内容, 可以把所有关于顺序表操作的函数定义部分放在这个头文件中->输入 完后保存 在main主函数中增加一条头文件包含语句,即: #include <iostream.h> #include <stdlib.h> #include ”list.h” 则所有的函数定义部分被包括到这个main主函数中。
• 成员二:整型变量size 表示当前线性表的长度(非数据长度,此长度可变)。 说明:定义为List类型的任一变量就表示一个顺序表。该 顺序表的长度为size。当size=0时,则表空,不能进行删 除操作;当size=MaxSize时,则表满,不能进行插入操 作。
ElemType finditem; cout<<"请输入要搜索的数字:"<<endl;
cin>>finditem;
if(FindList(a,finditem)) //在表a中找到值为finditem的元素,返回1 cout<<"恭喜!找到元素"<<finditem<<endl;
else
cout<<"Sorry!未找到元素"<<finditem<<endl;
void CreatList(List &L) { int i=0; ElemType x;
//从键盘输入元素建立一个顺序表
BACK
cout<<"请逐个输入顺序表元素,以-1作结束:"<<endl; cin>>x;
while(x!=-1){
if(i==MaxSize){ cout<<"顺序表已满,无法继续插入!"<<endl;
case 4:
//删除元素 cout<<"请输入您想删除的数字:"; cin>>x; DeleteList(a,x,0); break;
case 5:
//排序
SortList(a); break;
case 6:
//输出表
TraverseList(a); break;
case 7:
//退出 cout<<"本次游戏结束,谢谢您的光临,拜拜!"<<endl; mark=0;
//在表a中找到值为delitem的元素并删除,成功返回1 cout<<"恭喜!成功删除元素"<<delitem<<endl;
SortList(a);
//给顺序表a排序
TraverseList(a);
InsertList(a,9,0); //在有序表a的基础上插入数字9,插入后仍有序
TraverseList(a);
注意:这个头文件要与main主函数放在同一个工程(project)中,若 新建时不在一个工程中,可以通过 工程/添加工程/Files 来加入。
• 还可以定义一个创建表的函数,其功能是从键盘输
入元素 建立一个顺序表。
函数定义为 函数调用为:
GO
在main主函数中用 CreatList(a); 语句来调用,则 可以从键盘输入表元素了。
顺序表应用的完整格式:
#include <iostream.h> #include <stdlib.h>
const int MaxSize=20;
typedef int ElemType; struct List{ //假定int是实际情况下表元素的类型
ElemType list[MaxSize];
BACK
struct List{ ElemType list[MaxSize]; int size; }; • 成员一:数组list: 1)数组的作用是存放线性表中元素。线性表中的ai元素被 存放在数组list中下标为i-1的位置上,即list[i-1]位置对应ai 元素。 2)其中数组元素类型ElemType是事先通过typedef语句 定义好的一种数据类型,它可以代表任何一种数据类型。 3)其中MaxSize是事先通过const常量定义语句定义好的 一个常量,用它表示数组的大小,也就是可以存放线性表 的最大长度。 例: const int MaxSize=20; typedef int ElemType;
} } }
//switch分支结束
//while循环结束
//main函数结束
打气球游戏
• 初始状态:屏幕上显示n个气球,每个气球上标有 一个字母作标记。 • 游戏玩法:当你按一下键盘上某个字母,则与该 字母相应的那个气球被打掉消失,同时又在随机 位置上出现若干个气球,出现个数也随机。 • 胜负判定:如果你打掉气球的速度很快,屏幕上 气球为0时,则获胜;反之,如果你打的速度跟不 上气球出现速度,当屏幕上充满气球时,则你在 本次游戏中失败。
线性表
• 1、掌握线性表的表示和结构特点。 GO • 2、掌握对线性表的基本操作。 GO • 3、掌握顺序表的类型定义和每个成员的作 用。 GO • 4、掌握在顺序表上进行按值查找、插入、 删除的算法及其时间复杂度分析。 GO
顺序表的应用
编一个完整程序,包括顺序表的结构定义 (struct List)、顺序表上各项操作的函数定义 (书上有),以及在一个顺序表对象上进行各项 操作的函数调用(放在main主函数中) • 一个完整的程序,必须要有且只有一个main主函 数。程序的运行总是从main主函数开始,在主函 数中调用其他子函数,子函数之间也可以相互调 用。 • 通常,一个大程序都有头文件包含语句,这些头 文件中含有系统或用户自己定义的函数,如setw, cout,cin等等。如果在程序中用到这些函数,必须 要有相应的头文件包含语句,否则系统无法识别。
打气球游戏之分析:
• 气球序列可以看作是一个线性表,表中每个元素 为字符型char。 • 打气球,相当于删除表中某元素的操作,由用户 的输入来确定要删除之元素。 • 新增气球,相当于插入新元素到表中的操作,插 入操作由程序员编写在程序中。当元素被删除一 个时,可随机插入0~2个新元素。 • 最后,若气球被打完,相当于表为空,则获胜; 反之,气球充满,相当于表满,则失败。 • 屏幕上显示即表的输出,当不同时刻的输出画面 快速连接时,就形成了动画。