数据结构实验1-顺序表-各种操作


要求:

       创建两个顺序表实现两个顺序表的合并以及扩容,以及单个顺序表的查找,插入,删除,排序,清空,销毁,查找前驱以及后继等等。

       (有错会继续改的)

        以及程序的完备性,健壮性,可读性等等

经过这次实验感觉我写的最多的不是程序而是告诉程序执行者下一步该怎么做怎么选择。。。。。(一种上学期c语言课程设计的赶脚)



#include 
#include
#include
#include
#include
#define MAXSIZE 100
#define INCREMENT 20
using namespace std;
typedef int status;
char str[10];
int n1,n2,rec;
typedef struct
{
    int *elem;
    int len;
    int lise;
}sqlist;
sqlist sq1,sq2,sq3;
status initlist(sqlist &l)
{
    l.elem=(int *)malloc(sizeof(sqlist)*MAXSIZE);
    if(!l.elem)
        return 0;
    l.len=0;
    l.lise=MAXSIZE;
    return 1;
}
void getsq(int n,sqlist &l)//获取顺序表中元素
{
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&l.elem[i]);
        l.len++;
    }
}
void destorylist(sqlist &l)//销毁顺序表
{
    if(l.elem)
        delete []l.elem;
}
void clearlist(sqlist &l)//清空顺序表
{
    l.len=0;
}
status listempty(sqlist &l)//判断顺序表是否为空
{
    if(l.len==0)
    {
        return true;
    }
    return false;
}
status listlength(sqlist l)//获取非空顺序表中元素个数
{
    return l.len;
}
status getelem(sqlist l,int i,int &e)//获取顺序表中第i个元素
{
    if(i<=0||i>l.len)
    {
        return -1;
    }
    e=l.elem[i];
    return 1;
}
status locatelem(sqlist l,int e)//找顺序表中与e相等的第一个数的位置
{
    for(int i=1;i<=l.len;++i)
    {
        if(l.elem[i]==e)
            return i;
    }
    return -1;
}
status priorelem(sqlist l,int cur,int &pre)//在顺序表中寻找指定值的前驱
{
    for(int i=1;i<=l.len;++i)
    {
        if(l.elem[i]==cur)
        {
            pre=l.elem[i-1];
            return 1;
        }
    }
    return -1;
}
status nextelem(sqlist l,int cur,int &next)//在顺序表中寻找指定值的后继
{
    for(int i=1;i<=l.len;++i)
    {
        if(l.elem[i]==cur)
        {
            next=l.elem[i+1];
            return 1;
        }
    }
    return -1;
}
void listinsert(sqlist &l,int i,int e)//在顺序表第i个位置插入指定值
{
    for(int j=l.len;j>=i;j--)
    {
        l.elem[j+1]=l.elem[j];
    }
    l.elem[i]=e;
    l.len++;
}
status listdelete(sqlist &l,int i,int &e)//删除顺序表第i个元素并返回该元素
{
    if(i<=0||i>l.len)
        return -1;
    e=l.elem[i];
    for(int j=i+1;j<=l.len;++j)
    {
        l.elem[j-1]=l.elem[j];
    }
    l.len--;
    return 1;
}
void traverselist(sqlist l)//遍历顺序表并输出元素
{
    for(int i=1;i<=l.len;++i)
    {
        if(i==1)
            printf("%d",l.elem[i]);
        else
            printf(" %d",l.elem[i]);
    }
    printf("\n");
}
void sortlist(sqlist &l)
{
    for(int i=1;il.elem[j])
            {
                int tem=l.elem[i];
                l.elem[i]=l.elem[j];
                l.elem[j]=tem;
            }
        }
    }
    printf("\n");
}
status kuorong(sqlist &l)
{
    int c;
    printf("若选择扩容则输入1否则输入0\n");
    scanf("%d",&c);
    if(c==1)
    {
        int *newbase=(int *)realloc(l.elem,(l.lise+INCREMENT)*sizeof(sqlist));
        if(!newbase)
        {
            printf("扩容失败\n");
            return 0;
        }
        return 1;
    }
    else
        return 0;
}
status mergelist(sqlist l1,sqlist l2,sqlist &l3)
{
    if(l3.lise

你可能感兴趣的:(课本上实验)