【题目】:
顺序存储的线性表A,其数据元素为整型,试编写一算法,将A拆成B和C两个表,使A中元素值大于等于0的元素放入B,小于0的放入C中,要求:
(1)、表B和表C另外设置存储空间。
(2)、表B和表C不另外设置空间,而利用A的空间。
【分析】:
对于第一问,其实大家就非常容易想到,其实只要另外开辟两个线性表,
对于第一个线性表A历遍即可。
只要满足 a[i]>=0 ,放在线性表B,
否则,放在线性表C;
用顺序结构和链式结构都可以实现。
以下是我用顺序结构实现的。
附上代码:
#include<stdio.h> //线性表:顺序存储结构
#include<string.h>
#define MAXSIZE 9
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct Sqlist{
ElemType data[MAXSIZE];
int length;
Sqlist(){
length=0;
}
}Sqlist;
Status ListShow(Sqlist &L);
/* 重置为空表——清空*/
Status ListClear(Sqlist &L){
memset(L.data,0,sizeof(L.data));
L.length=0;
return OK;
}
/* 获取某个下标的元素的值——查询*/
Status GetElem(const Sqlist &L,const int &i,ElemType &e){
if(L.length==0||i<1||i>L.length){
printf("询问时:下标 %d,不合法。\n",i);
return ERROR;
}
e=L.data[i-1];
return OK;
}
/* 指定某个位置插入某元素——插入*/
Status ListInsert(Sqlist &L,int i,ElemType e){
int k,len=L.length,temp;
if(len>=MAXSIZE){
printf("错误提醒:线性表已满\n\n");
return ERROR;
}else if(i<1||i>len+1){
printf("错误提醒: