没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
实验题目:
顺序表的基本操作实现
实验目的和要求:
一、实验目的:
掌握线性表的基本操作算法,如插入、删除等。
二、实验内容:
实现顺序表基本操作运算(元素类型定义为整形),如插入、删除、求最大数及位置
及就地逆置算法。
实验过程:
Status InitList_Sq(SqList &L){ //算法 2.1 顺序表的初始化
//构造一个空的顺序表 L
L.elem=new ElemType[MAXSIZE]; //为顺序表分配一个大小为 MAXSIZE 的数组空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length=0; //空表长度为 0
return OK;
}
int LocateElem_Sq(SqList L,ElemType e){ //算法 2.2 顺序表的查找 时间复杂度 n
//顺序表的查找
for(int i=0;i<L.length;i++)
if(L.elem[i]==e) return i+1;
return 0;
}
Status ListInsert_Sq(SqList L,int i,ElemType e){ //算法 2.3 顺序表的插入
//在顺序表 L 中第 i 个位置之前插入新的元素 e
//i 值的合法范围是 1<=i<=L.length+1
int j;
if((i<1)||(i>L.length+1)) return ERROR;
if(L.length==MAXSIZE) return ERROR;
for(j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j];
L.elem[i-1]=e;
++L.length;
return OK;
}
Status ListDelete_Sq(SqList &L,int i,ElemType &e){ //算法 2.4 顺序表的删除
//在顺序表 L 中删除第 i 个元素,并用 e 返回其值
//i 值的合法范围是 1<=i<=L.length
int j;
if((i<1)||(i>L.length)) return ERROR;
e=L.elem[i-1];
for(j=i;j<=L.length-1;j++)
{
L.elem[j-1]=L.elem[j];
}
--L.length;
return OK;
}
int maxlocate_Sq(SqList L) //算法 2.5 最大数及位置
{
int maxid=0;
for(int i = 0;i<L.length;i++)
if(L.elem[i]>L.elem[maxid]) maxid=i;
return maxid+1;
}
Status DeletElem_Sq(SqList &L,ElemType e) //算法 2.6 按照元素值删除
{
for(int i = 0;i<L.length;i++)
{
if(L.elem[i]==e)
{
for(int j=i;j<L.length-1;j++)
L.elem[j]=L.elem[j+1];
L.length--;
return OK;
}
}
return ERROR;
}
Status InverseList_Sq(SqList &L) //算法 2.7 逆置
{
int k,length=L.length-1;
for(int i=0;i<L.length/2;i++)
{
k=L.elem[i];
L.elem[i]=L.elem[length];
L.elem[length]=k;
length--;
}
return OK;
}
main()函数中 switch 函数添加:
case 7:
d=maxlocate_Sq(L);
cout<<"最大元素的位置是:\n"<<d;
cout<<"\n 这个数为:\n"<<L.elem[d-1]<<endl;
break;
case 8:
cout<<"请输入想要删除的数值:\n";
cin>>d;
if(DeletElem_Sq(L,d))
cout<<"删除数值成功.\n";
else
cout<<"没有这个数值。\n";
break;
case 9:
if(InverseList_Sq(L))
cout<<"逆置成功!\n";
else
cout<<"逆置失败!\n";
break;
实验结果:
实验分析:
本次实验主要考察顺序表的相关知识,在做实验的过程中了解到程序的运行过程,现
对程序进行以下分析:
在实现实验内容时,主要从 main 函数入手,通过自顶向下的方法进行模块化编程,
首先进行主函数的完善,在 switch 函数内添加最大函数及其位置、按照元素值删除、函数
逆置三个功能。主函数的填充进行编写后,进行开始编写几个小模块。
算法 1.顺序表的初始化:定义一个数组空间,使空表长度为 0;
算法 2.顺序表的查找:输入一个数值,逐次对顺序表进行遍历,直到找到与该值相等
的数,时间复杂度为 n。
算法 3.顺序表的插入:先判断 i 值和顺序表的长度是否合法,如果合法,将从包括第 i
个元素开始之后的元素依次向后移动 1 个单位,将元素插入到完成后的数组的第 i 个元素
中,并是顺序表的长度+1。
算法 4.顺序表的删除:依据输入的 i 值,通过索引查找对应的元素,并将该元素之后
的元素向前移动一个单位,覆盖原来的第 i 个元素,并使顺序表的长度减一。
算法 5.最大数及位置:通过索引对顺序表中的元素遍历,定义一个变量,将顺序表中
的两个元素依次比较,将较大的一个赋值给该变量。
算法 6.按照元素值删除:按照给定元素查找该元素的位置,然后将该元素删除,后续
元素依次向前补。
算法 7.元素的逆置:找到顺序表的第一个和最后一个通过中间变量进行交换,而后其
索引依次加一、减一,交换 int(L.length/2)次后,实现顺序表元素的逆置。
实验成绩:
日期: 年 月 日
实验题目:
链表的基本操作实现
实验目的和要求:
一、实验目的:
掌握链表的基本操作算法,如链表的创建、插入、删除等,并能灵活运用。
二、实验要求:
设计实现有序链表(递增)的操作,如创建、插入、删除(按增值)、输出、逆置、
两个有序表的合并等。
实验过程:
Status ListInsert_L(LinkList &L,ElemType &e){ //有序单链表的插入
//在带头结点的单链表 L 中插入元素 e
LNode *p,*s;
p=L;
while(p && (p->next->data < e)) p=p->next;
s=new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return OK;
} //ListInsert_L
Status ListDelete_L(LinkList &L,ElemType &e){ //算法 2.9 单链表的按值删除
LNode *p;
p=L;
while(p->next->data!=e)
{
p=p->next;
if(p==NULL) return ERROR;
}
p->next=p->next->next;
return OK;
} //ListDelete_L
Status ListInverse(LinkList &L) //算法 2.12 有序链表的逆置
{
LNode *p,*q;
p=L->next;L->next=NULL;
while(p)
{
q=p->next;
剩余52页未读,继续阅读
资源评论
打野怪的江小河
- 粉丝: 33
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功