实验1 顺序表的操作

  • 格式:doc
  • 大小:348.50 KB
  • 文档页数:9

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)