#include<stdio.h>
#define MAXSIZE 50//最大表长
#define ElemType int
typedef struct {//定义顺序表结构体
ElemType data[MAXSIZE];//静态分配空间
int length;
}SqList;
bool ListInsert(SqList &L,int i,ElemType e){//在指定位置插入元素
if(i<1||i>L.length+1) //检查插入位置的合法性
return false;
if(L.length>=MAXSIZE) //检查表是否满
return false;
for(int j=L.length;j>=i;j--){
L.data[j]=L.data[j-1];//i后面的元素统统向后移动一格
}
L.data[i-1]=e;//在位序i处插入e
L.length++; //表长加1
return true;
}
bool ListDelete(SqList &L,int i,ElemType &e){ //删除线性表中指定位置的元素并将其返回
if(i<1||i>L.length) //检查删除位置的合法性
return false;
e=L.data[i-1];
for(int j=i;j<L.length;j++)//将第i个位置后的元素前移
L.data[j-1]=L.data[j];
L.length--; //表长减1
return true;
}
int LocateElem(SqList L,ElemType e){//按值查找并返回其位序
int i;
for(i=0;i<L.length;i++){
if(L.data[i]==e){
return i+1;//返回位序所以加1
}
}
return 0;//查找失败
}
int GetElem(SqList L,int i){//按位查找
return L.data[i-1];
}
int ListLength(SqList L){
return L.length;
}
bool Empty(SqList L){//判空
if(L.length==0)
return true;
return false;
}
void InitList(SqList &L){//初始化表
L.length=0;
}
void Full(SqList &L){//随意向表中插入一些元素
for(int i=0;i<=10;i++){
L.data[i]=i;
L.length++;
}
}
void PrintList(SqList L){//输出表的内容
for(int i=0;i<=L.length-1;i++){
printf("%d\t",L.data[i]);
}
}
void Reverse(SqList &L){//翻转表中所有元素
ElemType temp;//辅助变量 O(1)空间
int i=0; int j=L.length-1;
while(j>i){
temp=L.data[i];
L.data[i]=L.data[j];//swap
L.data[j]=temp;
i++;
j--;
}
}
void deleteAll_X(SqList &L,ElemType x){//删除表中所有的值为x的元素
int x_number=0;
for(int i=0;i<L.length;i++){
if(x==L.data[i]){
x_number++;//x的个数
}
if(x!=L.data[i]){
L.data[i-x_number]=L.data[i];
}
}
L.length-=x_number;
}
int main(){
SqList myList;
int t;
InitList(myList);
Full(myList);
ListInsert(myList,5,8);
ListInsert(myList,9,8);
deleteAll_X(myList,8);
PrintList(myList);
printf("\n表长为%d",ListLength(myList));
return 0;
}
线性表的基本操作包括:
初始化表 InitList(SqList &L)
插入元素ListInsert(SqList &L,int i,ElemType e)
删除元素ListDelete(SqList &L,int i,ElemType &e)
按值查找LocateElem(SqList L,ElemType e)
按位查找GetElem(SqList L,int i)
求表长 ListLength(SqList L)
判空 Empty(SqList L)
……
其他操作包括:
删除表中相同的元素x deleteAll_X(SqList &L,ElemType x)
逆值表中所有元素 Reverse(SqList &L)
打印表中内容 PrintList(SqList L)