实验1 顺序表的操作一、实验要求1 建立顺序表2 顺序表的长度并输出顺序表3 插入元素的位置和元素4 删除值为x的元素5 顺序表倒置6 将顺序表按升序排序7 将两个顺序有序表A和B合并为一个有序表C二、源代码DS.h#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0typedef 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_INCLUDEDSqList.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;}elsereturn 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){for(j=i;j<L.length;j++)L.elem[j]=L.elem[j+1];--L.length;}}return OK;}/*奇数排在偶数之前*/Status AdjustList_Sq(SqList &L){int temp;for(int i=0;i<L.length-1;i++){for(int j=i+1;j<L.length;j++){if(L.elem[i]%2==0&&L.elem[j]%2!=0){temp=L.elem[i];L.elem[i]=L.elem[j];L.elem[j]=temp;}}}return OK;}/*插入法生成递增有序表,有序表生成成功返回OK,失败返回ERROR*/ Status OrderList_sq(SqList &L, int n){if (InitList_Sq(L, n)){printf("请输入%d个元素:", n);for (int i = 0; i < n; i++){scanf("%d", &L.elem[i]);L.length++;}int temp;for(i=0;i<L.length;i++){for(int j=i+1;j<L.length;j++){if(L.elem[i]>L.elem[j]){temp=L.elem[i];L.elem[i]=L.elem[j];L.elem[j]=temp;}}}return OK;}elsereturn ERROR;}/*两个非递减有序表A和B,并把它们合并成一个非递减有序表C*/void MergeList_Sq(SqList La, SqList Lb, SqList &Lc ){ElemType *pa, *pb, *pc, *pa_last, *pb_last;pa = La.elem; pb = Lb.elem;Lc.listsize = Lc.length = La.length+Lb.length;pc = Lc.elem = (ElemType *)malloc(Lc.listsize * sizeof(ElemType));if (!Lc.elem) exit (OVERFLOW);pa_last = La.elem + La.length - 1;pb_last = Lb.elem + Lb.length - 1;while (pa <= pa_last && pb <= pb_last){if (*pa <= *pb) *pc++ = *pa++;else *pc++ = *pb++;}while(pa <= pa_last) *pc++ = *pa++;while(pb <= pb_last) *pc++ = *pb++;}themain.cpp#include "SqList.h"int main(){int choice, n, i, x;SqList L, La, Lb, Lc;while(1){menu();printf("选择你的操作:");scanf("%d",&choice);switch(choice){case 1:if(CreateList_Sq(L))printf("顺序表创建成功\n");elseprintf("顺序表创建失败\n");break;case 2:PrintList_Sq(L);break;case 3:printf("请输入删除元素的位置:");scanf("%d", &i);if(DeleteList_Sq(L, i, x))printf("被删除元素值为:%d\n",x);elseprintf("删除失败\n");break;case 4:printf("请输入删除元素值:");scanf("%d", &x);if(DeleteListX_Sq(L, x))printf("删除成功\n");elseprintf("删除失败\n");PrintList_Sq(L);break;case 5:AdjustList_Sq(L);printf("新链表为:\n");PrintList_Sq(L);break;case 6:printf("请输入顺序表长度:");scanf("%d", &n);if(OrderList_sq(L, n)){printf("值有序顺序表为:\n");PrintList_Sq(L);}elseprintf("顺序表创建失败\n");break;case 7:printf("请输入顺序表La的长度:");scanf("%d", &n);OrderList_sq(La, n);printf("请输入顺序表Lb的长度:");scanf("%d", &n);OrderList_sq(Lb, n);MergeList_Sq(La, Lb, Lc);printf("合并后的顺序表为:\n");PrintList_Sq(Lc);break;case 0:return 0;default:printf("输入错误,请重新输入\n");}}}三、运行结果1)程序主界面2)选择1建立顺序表,再选择2输出线性表的长度及内容。