/*
*数据结构:线性表的顺序表示
*线性表元素的序号从1开始
*Date: 2017/4/13
*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 100
#define InitSize 100 //表长度的初始化定义
#define ElemType int
#define ElemNum 10
struct SqList{
//ElemType data[InitSize];
ElemType *data;
int length;
};
void InitList(SqList *L); //初始化表。构造一个空的线性表
int Length(SqList L); //求表长。返回线性表L的长度,即表L中数据元素的个数
int LocateElem(SqList L,ElemType e); //按值查找操作。返回表L中指定元素的第一次出现的位置(数组下标),返回-1表示没找到
ElemType GetElem(SqList L,int i); //按位置查找值。返回表L中指定位置的值
bool ListInsert(SqList *L,int i,ElemType e); //插入操作。在表L中第i个位置插入指定值e
bool ListDelete(SqList *L,int i,ElemType *e); //删除操作。删除表L中第i个位置的值,并用e返回被删除的值
void PrintList(SqList L); //输出操作。按前后顺序输出线性表L的所有元素值
bool Empty(SqList L); //判空操作。若L为空表,则返回true,否则返回false
void DestroyList(SqList *L); //销毁操作。销毁线性表L,并释放线性表L所占用的内存空间
void InitList(SqList *L){
L->data = (ElemType *)malloc(InitSize * sizeof(ElemType));
//L = (SqList *)malloc(sizeof(SqList));
L->length = 0;
}
int Length(SqList L){
return L.length;
}
int LocateElem(SqList L,ElemType e){
int i;
for(i=0;i<L.length;i++){
if(L.data[i] == e){
return i+1;
}
}
return -1;
}
ElemType GetElem(SqList L,int i){
return L.data[i-1];
}
bool ListInsert(SqList *L,int i,ElemType e){
int j;
if(i<1 || i>L->length+1){
return false;
}
if(L->length >= MaxSize){
return false;
}
for(j=L->length;j>=i;j--){
L->data[j] = L->data[j-1];
}
L->data[j] = e;
L->length++;
return true;
}
bool ListDelete(SqList *L,int i,ElemType *e){
int j;
if(i<1 || i>L->length){
return false;
}
*e = L->data[i-1];
for(j=i;j<L->length;j++){
L->data[j-1] = L->data[j];
}
L->length--;
return true;
}
void PrintList(SqList L){
int i;
for(i=0;i<L.length;i++){
printf("%d ",L.data[i]); //%d,按需要修改输出类型
}
printf("\n");
}
bool Empty(SqList L){
if(L.length == 0){
return true;
}else{
return false;
}
}
void DestoryList(SqList *L){
free(L->data);
printf("线性表已经销毁\n");
}
int main(){
freopen("in.txt","r",stdin);
printf("/*************************线性表 顺序表示****************************/\n\n\n");
int i,x;
struct SqList L;
InitList(&L);
if(Empty(L)){
printf("线性表为空\n");
}else{
printf("线性表不为空\n");
}
for(i=0;i<ElemNum;i++){
scanf("%d",&x);
ListInsert(&L,i+1,x);
}
printf("原始:\n");
PrintList(L);
printf("表L的长度:%d\n",Length(L));
printf("5的位置:%d\n",LocateElem(L,5));
printf("2332的位置:%d\n",LocateElem(L,2332));
ListInsert(&L,3,9999);
printf("插入9999后:");
PrintList(L);
printf("第2个位置的元素值:%d\n",GetElem(L,2));
int e;
ListDelete(&L,2,&e);
printf("删除第2个位置的元素值%d后:",e);
PrintList(L);
if(Empty(L)){
printf("线性表为空\n");
}else{
printf("线性表不为空\n");
}
DestoryList(&L);
return 0;
}
in.txt:
3 2 4 9 87 5 12 33 122 31