下面是自己写的一个线性表的实现
/*
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef int ElementType;
*
* 对于插入和删除的时间复杂度为O(n)
* 对于,读取时间复杂度为O(1)
* 最好的情况是0(1)
* 最坏的情况是O(n)
* 平均情况是0((n-1)/2)
* 简化后为O(n)
typedef struct
{
ElementType data[MAXSIZE];
int length;
}SqList;
*
* 初始化线性表
int initList(SqList *sqList)
{
//sqList=malloc(sizeof(sqList));
sqList->length=0;
}
*
* 判断线性表是否为空
int listIsEmpty(SqList *sqList){
return sqList->length==0?0:1;
}
*
* 清空线性表
int clearList(SqList *sqList){
sqList->length=0;
}
int operateIndexIsRight(SqList *sqList,int i)
{
if(listIsEmpty(sqList))
{
if(i>sqList->length)
{
return 0;
}
else if(i<=0)
{
return 0;
}
return 1;
}else{
return 0;
}
}
*
* 将线性表L中的第i个位置元素返回给e
int GetElement(SqList *sqList,int i,ElementType *element)
{
if(operateIndexIsRight(sqList,i))
{
*element=sqList->data[i-1];
return 1;
}else{
return 0;
}
}
*
* 在线性表L中查找与给定值e相等的数据,如果查找成功,返回该元素在表 中序号表示成功,否则,返回0表示失败
int searchElement(SqList *sqList,ElementType e)
{
int diedai;
if(listIsEmpty(sqList))
{
for(diedai=0;diedai<sqList->length;diedai++)
{
if(e==sqList->data[diedai])
{
return diedai+1;
}
}
return 0;
}else{
return 0;
}
}
*
*在线性表L中第i个位置插入新的元素e
int insertList(SqList *sqList,int i,ElementType e)
{
int diedai;
if(i>MAXSIZE)
{
return 0;
}
else if(i<=0)
{
return 0;
}else{
for(diedai=sqList->length-1;diedai>=i-1;diedai--)
{
sqList->data[diedai+1]=sqList->data[diedai];
}
sqList->data[i-1]=e;
sqList->length++;
return 1;
}
}
*
* 小甲鱼的插入
ListInsert(SqList *L,int i,ElementType e)
{
int k;
if(L->length==MAXSIZE)
{
return 0;
}
if(i<1||i>L->length+1)
{
}
if(i<=L->length)
{
for(k=L->length-1;k>=i-1;k--)
{
L->data[k+1]=L->data[k];
}
}
L->data[i-1]=e;
L->length++;
return 1;
}
*
*删除线性表L中第i个位置元素,并用e返回其值
int deleteList(SqList *sqList,int i,ElementType *e)
{
int diedai;
if(operateIndexIsRight(sqList,i))
{
*e=sqList->data[i-1];
for(diedai=i-1;diedai<sqList->length-1;diedai++)
{
sqList->data[diedai]=sqList->data[diedai+1];
}
sqList->length--;
return 0;
}else{
return 0;
}
}
*
* 返回线性表L的元素个数
int listLength(SqList *sqList)
{
return sqList->length;
}
*
* 遍历打印线性表中所有的元素
int printLinerTable(SqList *sqList)
{
int variable;
for(variable=0;variable<sqList->length;variable++)
{
printf("%d\n",sqList->data[variable]);
}
}
int main(){
int searchVariable;
ElementType variable;
//初始化线性表
SqList sqList;
initList(&sqList);
//插入数据
insertList(&sqList,1,1);
insertList(&sqList,2,2);
insertList(&sqList,3,3);
insertList(&sqList,4,4);
insertList(&sqList,5,5);
insertList(&sqList,3,18);
printLinerTable(&sqList);
//打印线性表的元素个数
printf("元素表中一共有:%d个元素\n",listLength(&sqList));
//查找
searchVariable=3;
printf("需要查找的元素:%d在第:%d个位置\n",searchVariable,searchElement(&sqList,searchVariable));
//获取指定元素
searchVariable=3;
GetElement(&sqList,searchVariable,&variable);
printf("第:%d个元素是:%d\n",searchVariable,variable);
//删除
searchVariable=3;
deleteList(&sqList,searchVariable,&variable);
printf("需要删除的元素:%d在第:%d个位置\n",variable,searchVariable);
printLinerTable(&sqList);
//打印线性表的元素个数
printf("元素表中一共有:%d个元素\n",listLength(&sqList));
//判断线性表是否为空
printf("%d\n",listIsEmpty(&sqList));
//清空线性表
clearList(&sqList);
//判断线性表是否为空
printf("%d\n",listIsEmpty(&sqList));
}
*/