老师布置的实验作业,经过自己修改和整理之后做了出来 ,这个代码应该算是非常的简单的了,因为没有用到复杂的的malloc等内存分配,只是用数组进行简单的分配测试。
先贴出来老师的作业:
实验1:顺序表的建立及运算
要求:
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
*6、将线性表中的元素就地逆序(只允许用一个暂存单元);
然后下面的是我的代码处理方法:
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef struct
{
int elem[MAXSIZE];
int len;
}sqlist;
void show_all(sqlist *L,int n)
{
int i;
L->len = 0;
cout<<"顺序表数据为:"<<endl;
for(i=0;i<n;i++)
{
cout<<L->elem[L->len]<<" ";
L->len++;
}
cout<<"\n\n";
}
void init_list(sqlist *L,int n)
{
int i;
int tmp;
L->len = 0;
cout<<"请在此输入顺序表值:\n";
for(i=0;i<n;i++)
{
cin>>tmp;
L->elem[L->len]=tmp;
L->len++;
}
cout<<"顺序表建立成功!\n"<<endl;
show_all(L,n);
}
void up_order(sqlist *L)
{
int i,j;
int tmp;
for(i=0;i<L->len;i++)
{
for(j=i+1;j<L->len;j++)
{
if(L->elem[i]>L->elem[j])
{
tmp = L->elem[i];
L->elem[i] = L->elem[j];
L->elem[j] = tmp;
}
}
}
}
void find_max(sqlist *L)
{
int i;
int tmp = L->elem[0];
for (i=0;i<L->len;i++)
{
if (tmp < L->elem[i])
{
tmp = L->elem[i];
}
}
cout<<"\n线性表中最大的元素为: "<<tmp<<endl;
}
void instfirst(sqlist* L,int f)
{
int i;
int m;
cout<<"请输入添加数字:\n";
cin>>m;
for (i=L->len;i>=f;i--)
{
L->elem[i] = L->elem[i-1];
}
L->elem[f-1] = m;
L->len++;
}
void dele_list(sqlist* L,int f)
{
int i;
for (i=f;i<=L->len;i++)
{
L->elem[i-1] = L->elem[i];
}
L->len--;
}
void down_order(sqlist* L)
{
int i,j;
int tmp;
for(i=0;i<L->len;i++)
{
for(j=i+1;j<L->len;j++)
{
if(L->elem[i]<L->elem[j])
{
tmp = L->elem[i];
L->elem[i] = L->elem[j];
L->elem[j] = tmp;
}
}
}
}
void hand(int flag,sqlist* L)
{
int f;
int n;
switch(flag)
{
case 1:
find_max(L);
break;
case 2 :
cout<<"请输入您要插入的元素位置:\n";
cin>>f;
if ((f<1)||(f>L->len))
{
cout<<"输入位置错误!\n";
break;
}
instfirst(L,f);
n = L->len;
show_all(L,n);
break;
case 3 :
cout<<"请输入您要删除的元素位置:\n";
cin>>f;
if ((f==0)||(f>L->len))
{
cout<<"输入位置错误!\n";
break;
}
dele_list(L,f);
n = L->len;
show_all(L,n);
break;
case 4 :
up_order(L);
n = L->len;
show_all(L,n);
break;
case 5:
down_order(L);
n = L->len;
show_all(L,n);
break;
default:
break;
}
}
void menu(sqlist *L)
{
int n,flag;
cout<<"***************************\n";
cout<<"*******链表实验系统********\n";
cout<<"***************************\n\n";
cout<<"请输入您想建立的链表的个数\n";
cin>>n;
if((n>MAXSIZE)&&(n<1))
cout<<"数值错误,请重新输入:输入范围(1~100)";
init_list(L,n);
for(;;)
{
cout<<"*******************************\n";
cout<<"*******链表实验测试菜单********\n";
cout<<"*******************************\n\n";
cout<<"*****1.查找链表中最大元素********\n";
cout<<"*****2.插入正整数x **************\n";
cout<<"*****3.删除第j个元素*************\n";
cout<<"*****4.线性表升序排列************\n";
cout<<"*****5.线性表降序排列************\n";
cout<<"*****6.退出程序******************\n";
cin>>flag;
if (flag == 6)
break;
hand(flag,L);
}
}
int main()
{
sqlist L;
menu(&L);
return 0;
}
代码的结构和健壮程度上面都比较的简单,但是方便老师的检测。
还有最后的第六点,不知道符不符合老师作业要求。