实验1 顺序表的操作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验1 顺序表的操作
一、实验要求
1 建立顺序表
2 顺序表的长度并输出顺序表
3 插入元素的位置和元素
4 删除值为x的元素
5 顺序表倒置
6 将顺序表按升序排序
7 将两个顺序有序表A和B合并为一个有序表C
二、源代码
DS.h
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status;
SqList.h
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#include "DS.h"
typedef int ElemType;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
void menu();
Status InitList_Sq(SqList &L, int n);/*初始化顺序表*/
Status CreateList_Sq(SqList &L);/*建立顺序表*/
void PrintList_Sq(SqList L);/*输出顺序表*/
Status DeleteList_Sq(SqList &L,int i,ElemType &e);/*删除第i个元素*/
Status DeleteListX_Sq(SqList &L,ElemType x);/*删除值为x的元素*/
Status AdjustList_Sq(SqList &L);/*奇数排在偶数之前*/
Status OrderList_sq(SqList &L, int n);/*插入法生成递增有序表*/
void MergeList_Sq(SqList La, SqList Lb, SqList &Lc );/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/
#endif // SQLIST_H_INCLUDED
SqList.cpp
#include "SqList.h"
void menu()
{
printf("\t\t\t 顺序表基本操作\n\n");
printf("\t\t\t1.建立顺序表\n");
printf("\t\t\t2.遍历顺序表\n");
printf("\t\t\t3.删除第i 个元素\n");
printf("\t\t\t4.删除值为x 的元素\n");
printf("\t\t\t5.奇数排在偶数之前\n");
printf("\t\t\t6.插入法生成递增有序表\n");
printf("\t\t\t7.两个非递减有序表La和Lb合并成非递减有序表Lc\n");
printf("\t\t\t0.退出\n\n");
}
/*初始化顺序表*/
Status InitList_Sq(SqList &L, int n)
{
L.elem=(ElemType*)malloc(n*sizeof(ElemType));
if(!L.elem) exit(OVERFLOW);
L.length=0;
L.listsize=n;
return OK;
}
/*建立顺序表*/
Status CreateList_Sq(SqList &L)
{
int n, i;
printf("请输入顺序表长度:");
scanf("%d", &n);
if(InitList_Sq(L, n))
{
printf("请输入%d个元素:", n);
for(i = 0; i < n; i++)
{
scanf("%d", &L.elem[i]);
L.length++;
}
return OK;
}
else
return ERROR;
}
/*输出顺序表*/
void PrintList_Sq(SqList L)
{
int i;
printf("顺序表中元素为:\n");
for(i = 0; i < L.length; i++)
{
printf("%d ", L.elem[i]);
}
printf("\n");
}
/*删除第i个元素*/
Status DeleteList_Sq(SqList &L,int i,ElemType &e)
{
ElemType *p, *q;
if( (i<1) || (i>L.length) ) return ERROR;
p = &(L.elem[i-1]);
e = *p;
q = L.elem+L.length-1;
for(++p; p <= q; ++p) *(p-1) = *p;
--L.length;
return OK;
}
/*删除值为x的元素,删除成功返回OK,删除失败返回ERROR*/ Status DeleteListX_Sq(SqList &L,ElemType x)
{
int i,j;
for(i = 0; i < L.length; i++)
{
if( L.elem[i]==x)