第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;
}