01顺序表的基本操作

第1关:顺序表的插入操作

/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList **L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList *) malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList *L)    //初始化线性表
{
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList *L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList *L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList *L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int ListInsert(SqList *L,int i, ElemType e)
//在第i个位置插入元素e
{
//请在这里补充代码,完成本关任务吧
/*************begin*************/
int k;
if(i>L->length+1||i<0)
{
    return 0;
}
for(k=L->length-1;k>=i-1;k--)
{
    L->data[k+1]=L->data[k];
}
L->data[k+1]=e;
L->length++;
return 1;
/**************end************/
}

int main() {
    int a[MaxSize], n, k, e;
    SqList *L;
    InitList(L);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&L, a, n);//将上述输入元素创建成顺序表L

    scanf("%d %d",&k,&e);//
    if(ListInsert(L,k,e))
    {
        printf("插入成功,插入后顺序表如下:\n");
        DispList(L);
    }
    else
        printf("插入位置不合法,插入失败!\n");
    DestroyList(L);
    return 0;
}

第2关:顺序表的删除操作

/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList **L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList *) malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList *L)    //初始化线性表
{
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList *L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList *L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList *L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int ListDelete(SqList *L,int i, ElemType *e)
//删除第i个位置的元素,并存放到e中
{
//请在这里补充代码,完成本关任务吧
/*************begin*************/
if(i<=0||i>L->length)
{
    return 0;
}
   int k=i;
   *e=L->data[k-1];
   for(k=i-1;k<L->length-1;k++)
   {    
       L->data[k]=L->data[k+1];
   }
   L->length--;
   return 1;

/**************end************/
}

int main() {
    int a[MaxSize], n, k, e;
    SqList *L;
    InitList(L);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&L, a, n);//将上述输入元素创建成顺序表L
    scanf("%d", &k);//输入需要查找的元素位置
    if(ListDelete(L,k,&e))
    {
        printf("删除成功,删除后顺序表如下:\n");
        DispList(L);
        printf("删除元素的值:%d",e);
    }

    else
         printf("删除位置不合法,删除失败!\n");

     DestroyList(L);
    return 0;
}

第3关:顺序表的按照序号查找值操作

/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList **L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList *) malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList *L)    //初始化线性表
{
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList *L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList *L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList *L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int GetElem(SqList *L, int i, ElemType *e)
//求线性表中第i个元素值
{
//请在这里补充代码,完成本关任务吧
/*************begin*************/
 if(i<=0||i>L->length)
 return 0;
 *e=L->data[i-1];
 return 1;

/**************end************/
}


int main() {
    int a[MaxSize], n, k, e;
    SqList *L;
    InitList(L);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&L, a, n);//将上述输入元素创建成顺序表L
    scanf("%d", &k);//输入需要查找的元素位置
    if (GetElem(L, k, &e))
        {
            printf("查找成功!\n");
            printf("第%d个元素的值:\n%d",k,e);
        }
    else
        printf("查找失败!\n");
    return 0;
}

第4关:顺序表的按照值查找序号操作

/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList **L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList *) malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList *L)    //初始化线性表
{
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList *L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList *L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList *L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}



int LocateElem(SqList *L, ElemType e)
//查找第一个值域为e的元素序号
{
    //请在这里补充代码,完成本关任务吧
    /*************begin*************/
     int k=0;
     for(k=0;k<L->length;k++)
     {
         if(L->data[k]==e)
         return k+1;
     }
     return 0;

    /**************end************/
}

int main() {
    int a[MaxSize], n, k, e;
    SqList *L;
    InitList(L);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&L, a, n);//将上述输入元素创建成顺序表L
   scanf("%d", &e);//输入需要查找的元素

    k=LocateElem(L,e);
    if(k==0)
    {
        printf("查找失败!\n");
    }
    else
    {
        printf("查找成功!\n");
        printf("%d 是顺序表第%d个元素",e,k);
    }
    DestroyList(L);
    return 0;
}

第5关:顺序表的逆置操作

/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList **L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList *) malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList *L)    //初始化线性表
{
    L = (SqList *) malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList *L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList *L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList *L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}


void ListReverse(SqList *L)
{
    /*************begin*************/
    int left=0,right=L->length-1;
    while(left<right)
    {
        int tem=L->data[left];
        L->data[left]=L->data[right];
        L->data[right]=tem;
        left++;
        right--;
    }

    
    /**************end************/
}


int main() {
    int a[MaxSize], n, k, e;
    SqList *L;
    InitList(L);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&L, a, n);//将上述输入元素创建成顺序表L

    printf("逆置顺序表:\n");
    ListReverse(L);
    DispList(L);
    //printf("%d\n",k);
    DestroyList(L);
    return 0;
}

第6关:两个有序顺序表的合并操作

#define  _CRT_SECURE_NO_WARNINGS
/*************************************************************
    顺序表的基本操作
    date: July 2024
    Wan shuzhen
**************************************************************/


#include <stdio.h>
#include <stdlib.h>

#define MaxSize 50
typedef int ElemType;
typedef struct {
    ElemType data[MaxSize];
    int length;
} SqList;

void CreateList(SqList** L, ElemType a[], int n) //整体建立顺序表
{
    *L = (SqList*)malloc(sizeof(SqList));
    for (int i = 0; i < n; i++)
        (*L)->data[i] = a[i];
    (*L)->length = n;
}

void InitList(SqList* L)    //初始化线性表
{
    L = (SqList*)malloc(sizeof(SqList));
    L->length = 0;
}

void DestroyList(SqList* L)   //销毁线性表
{
    free(L);
}

int ListEmpty(SqList* L)    //判线性表是否为空表
{
    return (L->length == 0);
}

void DispList(SqList* L)    //输出线性表
{
    for (int i = 0; i < L->length; i++) {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}

int MergeList(SqList* La, SqList* Lb, SqList** Lc)
{
    // 已知顺序线性表La和Lb的元素按值非递减排列。
    // 归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。
    /********** Begin **********/
    int n1 = 0, n2 = 0, n3 = 0, arr[50];
    while (n1 < La->length && n2 < Lb->length)
    {
        if (La->data[n1] < Lb->data[n2])
        {
            arr[n3] = La->data[n1];
            n3++;
            n1++;
        }
        else {
            arr[n3] = Lb->data[n2];
            n3++;
            n2++;
        }
    }
    if (n1 < La->length)
    {
        while (n1 < La->length)
        {
            arr[n3] = La->data[n1];
            n3++;
            n1++;
        }
    }
    else if (n2 < Lb->length)
    {
        while (n2 < Lb->length)
        {
            arr[n3] = Lb->data[n2];
            n3++; n2++;
        }
    }
    CreateList(Lc, arr, n3 );
    return 1;
    /********** End **********/
}

int main() {
    int a[MaxSize], n, k, e;
    SqList* La=(SqList*)malloc(sizeof(SqList)), * Lb= (SqList*)malloc(sizeof(SqList)), * Lc= (SqList*)malloc(sizeof(SqList));
    InitList(La);
    InitList(Lb);
    InitList(Lc);
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&La, a, n);//将上述输入元素创建成顺序表L
    scanf("%d", &n);//输入线性表元素个数
    for (int i = 0; i < n; i++)
        scanf("%d", &a[i]);//输入线性表元素值
    CreateList(&Lb, a, n);//将上述输入元素创建成顺序表L

    MergeList(La, Lb, &Lc);
    printf("合并两个有序顺序表:\n");
    DispList(Lc);

    DestroyList(Lc);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值