数据结构,,,顺序表

#include<stdio.h>


#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -1


typedef int ElemType;
typedef int Status;


typedef struct
{
  ElemType elem[MAXSIZE];
  int length;
}SqList;


int InitList_Sq(SqList *L)
{
    int i, n;
    printf("请输入一个数:");
    scanf("%d",&n);
    if(n>MAXSIZE)
        return ERROR;
    printf("请输入%d个数:", n);
    for(i=0;i<n;i++)
        scanf("%d",&L->elem[i]);


    L->length=n;
    if(L==NULL)
        return ERROR;


    return OK;
}
int ListDisp(SqList L)
{
    int i;
    for(i=0;i<L.length;i++)
        printf("%d ",L.elem[i]);
    printf("\n");
    return OK;
}
Status ListInsert_Sq(SqList *L,int i, ElemType e)
{
    int k;
    if(L->length==MAXSIZE)
        return ERROR;
    if(i<=L->length)
    {
        for(k=L->length-1;k>=i-1;k--)
            L->elem[k+1]=L->elem[k];
    }
    L->elem[i-1]=e;
    L->length++;
    return OK;
}
Status ListDelete_Sq(SqList *L,int i, ElemType *e)
{
    int k;
    if(L->length==0)
        return ERROR;
    if(i<1 || i>L->length)
        return ERROR;
    *e=L->elem[i-1];
    if(i<L->length)
    {
        for(k=i;k<L->length;k++)
        {
            L->elem[k-1]=L->elem[k];
        }
    }
    L->length--;
    return OK;
}
Status MergeOrderList(SqList LA,SqList LB,SqList *LC)
{
    int i, ia=0,ib=0;
    if(LA.length+LB.length>MAXSIZE)
        return OVERFLOW;
    i=0;
    while(ia<LA.length && ib<LB.length)
    {
        if(LA.elem[ia]<LB.elem[ib])
        {
            LC->elem[i]=LA.elem[ia];
            ia++;
        }
        else
        {
            LC->elem[i]=LB.elem[ib];
            ib++;
        }
        i++;
    }
    if(ia<LA.length)
    {
        while(ia<LA.length)
            LC->elem[i++]=LA.elem[ia++];
    }
     if(ib<LB.length)
    {
        while(ib<LB.length)
            LC->elem[i++]=LB.elem[ib++];
    }
    LC->length=LA.length+LB.length;
    return OK;
}
int main()
{
SqList L,LA,LB,LC;
    ElemType e;
int i,flag;


flag = InitList_Sq(&L);
if(flag == ERROR)
{
printf("构造线性表失败!\n");
return 0;
}
printf("构造线性表成功!\n");


printf("输出数组元素:");
ListDisp(L);


    printf("请输入要插入的元素:");
scanf("%d",&e);
printf("请输入要插入元素的位置:");
scanf("%d",&i);
    flag = ListInsert_Sq(&L,i,e);
if(flag == ERROR)
{
printf("插入位置不合法!\n");
return 0;
}
else if(flag == OVERFLOW)
{
printf("表已满,无法插入,溢出!\n");
return 0;
}
else
printf("插入成功!\n");


    printf("插入元素后的数组元素:");
  ListDisp(L);


    printf("请输入要删除元素的位置:");
scanf("%d",&i);
flag = ListDelete_Sq(&L,i,&e);
if(flag == ERROR)
{
printf("删除位置不合法!\n");
return 0;
}
else
printf("删除成功!\n");


printf("删除的元素为:%d\n",e);
    printf("删除元素后的数组元素:");
    ListDisp(L);


printf("两个有序表的合并:\n");
InitList_Sq(&LA);
InitList_Sq(&LB);
flag = MergeOrderList(LA,LB,&LC);
if(flag == OVERFLOW)
{
printf("合并后溢出!无法合并。\n");
return 0;
}
else
printf("合并成功!\n");
    ListDisp(LC);


return 0;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值