appleflower 发表于 2007-12-9 11:08

有关顺序表的简单算法

#include<iostream.h>
#include<stdlib.h>
#define elemtype int

const int maxsize=9;
struct seqlist
{
        elemtype a[9];
        int len;
};

seqlist insert_seqlist (seqlist L,elemtype x,int i)//插入函数
{
        int j;
        if (L.len>=maxsize-1)
                cout<<"表满,无插入"<<endl;
        else if((i<1) || (i>L.len+1))
                cout<<"位置错误"<<endl;
                else
                {
                        for (j=L.len;j>=i;j--)
                                L.a[j+1]=L.a[j];//元素后移
                                L.a[i]=x;//插入元素
                                L.len++;//表长度加1
                }
        return L;
}

seqlist delete_seqlist(seqlist L,int i)//删除函数
{
        int j;
        if ((i<1)||(i>=L.len))
                cout<<"位置错误"<<endl;
        else{
                for (j=i+1;j<=L.len;j++)
                        L.a[j-1]=L.a[j];//元素前移
                        L.len--;//表长度减1
                }
        return L;
}

void print_seqlist (seqlist L)//输出函数
{
        int j;
        cout<<"此时的顺序表中的元素如下:"<<endl;
        for (j=1;j<=L.len;j++)
                cout<<L.a[j]<<" ";
        cout<<endl;
}

void menu()
{
        cout<<"        \n\n\t\t\t顺  序  表\n\n\n\t\t\t0 退   出  \n\n\t\t\t1 插   入\n\n\t\t\t2 删   除\n\n\t\t\t3 显   示 \n\n";
        cout <<"请输入要进行的操作(0-->3):";

}

void main ()//主函数
{
        seqlist L;
        elemtype x;
        int n;
        cout<<"请输入表中元素个数:";
        cin>>n;
        for (int j=1;j<=n;j++)
                {
                        cout<<"请输入第"<<j<<"数"<<endl;
                        cin>>L.a[j];
                }//建立顺序表

        L.len=n;
        print_seqlist(L);//调用输出函数,输出表中元素

        menu();

        while (1)
        {
                int d;
                cin>>d;
                switch(d)
                {
                        case 0:        exit(0);menu();break;
                        case 1:
                                {        cout<<"请输入要插入的元素及位置:";
                                        cin>>x>>j;
                                        L=insert_seqlist (L,x,j);
                                        print_seqlist(L);//输出插入后的表中元素
                                        menu();break;
                                }
                        case 2:
                                {
                                        cout<<"请输入要删除的元素位置:";
                                        cin>>j;
                                        L=delete_seqlist(L,j);//调用删除函数
                                        print_seqlist(L);//输出删除后的表中元素
                                        menu();break;
                                }
                        case 3:        print_seqlist(L);menu();break;
                        default:
                                menu();
                                cout<<"输入无效≌请重新输入(0======== 3)"<<endl;
                                break;
                }
        }
        cout<<endl;                                  
}

oldwolf 发表于 2008-3-19 14:23

为什么大家都不用类 而用结构体呢?

jasjac 发表于 2008-3-26 10:08

好象删除不对

好象删除不对,比如1 2 3 4 5 6 7 8 9 0十个数,删第五个,结果是只有1 2 3 4了

jasjac 发表于 2008-3-26 10:16

你有一个小小的错误!

seqlist delete_seqlist(seqlist L,int i)//删除函数
{
    int j;
    if ((i<1)||(i>=L.len))
        cout<<"位置错误"<<endl;
    else{
        for (j=i+1;j<=L.len;j++)
            L.a[j-1]=L.a[j];//元素前移
            L.len--;//表长度减1
        }
    return L;
}
  for (j=i+1;j<=L.len;j++)应该是  for (j=i+1;j<L.len;j++)
这个就不说明了,相信大家都能看明白

页: [1]

编程论坛