/**
* 线性表
**/
#include "stdio.h"
#include <stdlib.h>
#include <iostream.h>
#define LIST_MAX_LENGTH 100 //线性表的最大长度
#define OK 1
#define ERROR 0
//定义线性表结构
typedef struct{
int *item; //指向存放线性表中数据元素的基地址
int length; //线性表的当前长度
}SQ_LIST;
//初始线性表
int init(SQ_LIST *L)
{
L->item=(int*)malloc(LIST_MAX_LENGTH*sizeof(int)); //分配空间
if (L->item==NULL) return ERROR; //若分配空间不成功,返回ERROR
L->length=0; //将当前线性表长度置0
return OK; //成功返回OK
}
//返回线性表长度
int length(SQ_LIST L)
{
return L.length;
}
//销毁线性表
void destroy(SQ_LIST *L)
{
if (L->item) free(L->item); //释放线性表占据的所有存储空间
}
//清空线性表
void clear(SQ_LIST *L)
{
L->length=0; //将线性表的长度置为0
}
//查找对应的元素
int getItem(SQ_LIST L,int i,int *e)
{
if(i<1 || i>L.length)
{
return ERROR;
}
*e = L.item[i-1];
return OK;
}
//检索e的位置
int getLocate(SQ_LIST L,int e)
{
for(int i=0;i<L.length;i++)
{
if(L.item[i] == e) return i+1;
}
return 0;
}
//第i个元素前插入e
int insertList(SQ_LIST *L, int i, int e)
{
//如果线性表已经满了
if(L->length==LIST_MAX_LENGTH) return ERROR;
if(i<1 || i>L->length+1) return ERROR;
for(int j=L->length-1;j>=i-1;j--)
{
L->item[j+1] = L->item[j];
}
L->item[i-1] = e;
L->length++;
return OK;
}
//第i个元素删除
int deleteList(SQ_LIST *L, int i, int *e)
{
if(i<1 || i>L->length+1) return ERROR;
*e = L->item[i-1];
for(int j=i;j<L->length-2;j++)
{
L->item[j-1] = L->item[j];
}
L->length--;
return OK;
}
//插入线性表
void insert(SQ_LIST *L)
{
cout<<"请依次递增输入这5个数据:"<<endl;
for(int i=0;i<5;i++)
{
cin>>L->item[i];
L->length++;
}
}
//输出线性表
void print(SQ_LIST *L)
{
cout<<"输出的结果是:";
for(int i=0;i<L->length;i++)
{
cout<<L->item[i]<<" ";
}
cout<<endl;
}