顺序表实验--数组法

来源:互联网 发布:自动编程 编辑:程序博客网 时间:2024/06/16 03:21
 老师布置的实验作业,经过自己修改和整理之后做了出来 ,这个代码应该算是非常的简单的了,因为没有用到复杂的的malloc等内存分配,只是用数组进行简单的分配测试。 先贴出来老师的作业: 实验1:顺序表的建立及运算

要求:
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
*6、将线性表中的元素就地逆序(只允许用一个暂存单元);

然后下面的是我的代码处理方法:
#include <iostream>using namespace std;#define MAXSIZE 100typedef 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;} 
 代码的结构和健壮程度上面都比较的简单,但是方便老师的检测。 还有最后的第六点,不知道符不符合老师作业要求。