1.线性表的顺序表示
//定义顺序表
#define MAXSIZE 120 //顺序表达到的最大长度
typedef struct{
ElemType *elem; //存储空间的基地址
int length; //顺序表的当前长度
} SqList; // 顺序表的结构类型为SqLIst
//用顺序表存储稀疏多项式
#define MAXSIZE 100 //多项式可能达到的最大长度
typedef struct{ // 多项式非零项的定义
float coef; //系数
int expn; //指数
}polynomial;
typedef struct{
polynomial *elem; //存储空间的基地址
int length; //多项式中当前的项数
}SqList; //多项式的顺序存储结构为SqList
//用顺序表存储图书信息
#define MAXSIZE 1000
typedef struct{
char name[50];
char no[20];
}Book;
typedef struct{
Book *book; //存储空间的基地址
int length;
}SqList;
2.顺序表的基本操作实现
//----顺序表的初始化——构造一个空的顺序表----
typedef int ElemType;
struct SqList{
ElemType *Data; //存储空间基地址
int length; //顺序表当前长度即表中元素个数
int MaxSize; //表的最大容量
};
struct SqList *Creatlist(int max){
SqList *L;
L=(struct SqList*)malloc(sizeof(struct SqList)); //动态分配内存空间
L->Data=(ElemType*)malloc(sizeof(ElemType*)*max); //获得基地址
L->MaxSize=max; //赋予表的最大容量
L->length=0; //初始化时表中没有元素,置为0
}
//----取值/查找第i个数据元素的值,这里返回的是下标----
int Findth(struct SqList *L,ElemType e){ //e是查找的值
int i=0;
for(i=0;i<L->length;i++){
if(L->Data[i]==e)
return i;
else
return -1;
}
}
//----在i位置插入数X----
void Insert(struct SqList *L,int i,ElemType X){
int j;
if(L->length>=L-MaxSize)
printf("List is full!\n"); //检查表是否已满
if(i<1||i>L->length+1)
printf("illegal i\n"); //检查插入位置是否合理,为负或者与最后一个元素相差1以上即为不合理
for(j=L->length-1;j<=i-1;j--)
L->Data[j+1]=L->Data[j]; //将i后的元素向后移1
L->Data[i-1]=X; //在i插入新的元素
L->length++; //表的当前长度加1
}
//----顺序表的删除操作----
void Delete(struct SqList *L,int i){
int j;
if(i<1||i>L->length)
{printf("illegal i\n");}
for(j=i;j<=L->length-1;j++)
L->Data[j-1]=L->Data[j];}//所有元素前移
L->length--; //表长减1
}
3.实验例题
采用顺序表存储一批整数,去掉其中所有的偶数。你的任务是创建一个顺序表,输入多个整数存入表中,删除其中的偶数,然后输出表中的所有数据。
输入描述: 输入由两行组成 第1行:输入个数n 第2行:输入n个整数
输出描述: 输出由两行组成 第1行:顺序表中数据个数 第2行:顺序表中的数据,每个整数用空格隔开。
样例输入: 10 34 23 9 10 10 17 31 32 1 15
样例输出: 6 23 9 17 31 1 15
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
struct SqList {
ElementType *Data;
int N; //元素个数
int MaxSize; //最大容量
};
struct SqList* Creatlist(int max){
struct SqList* list=(struct SqList*)malloc(sizeof(struct SqList*));
list->MaxSize=max;
list->N=0;
list->Data=(ElementType *)malloc(sizeof(ElementType)*max);
for(int i=0;i<max;i++){
scanf("%d ",&list->Data[i]);
list->N++;
}
return list;
} ;
void deleteAt(struct SqList* list,int index){
for(int i=index;i<list->N;i++)
{
list->Data[i]=list->Data[i+1];
}
list->N--;
}
void deleteEven(struct SqList* list)
{
for(int i=0;i<list->N;i++)
{
if(list->Data[i]%2==0){
deleteAt(list,i);
i--;
}
}
}
void Show(struct SqList* list)
{
printf("%d\n",list->N);
for(int i=0;i<list->N;i++){
printf("%d ",list->Data[i]);
}
}
int main(){
int n;
scanf("%d\n",&n);
struct SqList* list=Creatlist(n);
deleteEven(list);
Show(list);
}