以下是一个对线性表的初始化、取值、查找、插入和删除的实现过程,接下来我们主要讨论这5个主要操作的实现。现在我们来单独看一下每一个操作是怎么实现的。
(1)初始化
顺序表的初始化操作就是构造出一个空的顺序表,首先我们对顺序表进行初始化,代码如下:
typedef struct SequentialList
{
int actualLength;//定义最初始的实际长度
int data[LIST_MAX_LENGTH];//最大长度
}*SequentialListPtr;
(2)取值
接下来就是取值,我们需要输出顺序表的顺序,可以通过设计一个函数来进行判断,是否可以装下顺序表的实际长度。代码:
void outputList(SequentialListPtr paraList)//设计一个函数,输出所有包含的顺序表,并进行判断是否可以装下整个线性表的实际长度
{
for(int i=0;i<paraList->actualLength;i++)
{
printf("%d",paraList->data[i]);
}//of for i
printf("\r\n");
}
此外,我们还需要把每一块的地址给打印出来:
void outputmemory(SequentialListPtr paraListPtr)
{
printf("the address of the structure: %ld\r\n",paraListPtr);
printf("the address of the actualLength: %ld\r\n",¶ListPtr->actualLength);
printf("the address of the data: %ld\r\n",¶ListPtr->data);
printf("the address of the actual data: %ld\r\n",¶ListPtr->data[0]);
printf("the address of the second data: %d\r\n",¶ListPtr->data[1]);
}//of outputmemory
我们将地址存放到data数组中,以此查找:
SequentialListPtr sequentialListInit(int paraData[],int paraLength)
{
SequentialListPtr resultPtr = (SequentialList*)malloc(sizeof(SequentialList));
for (int i=0;i<paraLength;i++)
{
resultPtr->data[i]=paraData[i];
}//of for i
resultPtr->actualLength = paraLength;
return resultPtr;
}//of sequentialListInit
(3)插入
我们接下来就要设计插入的函数了,将原先已经存放好的顺序表进行插入:
void sequentialListInsert(SequentialListPtr paraListPtr,int paraPosition,int paraValue)//对顺序表的长度进行判断,如果不能则无法插入
{
//step 1.对存储空间进行检查
if(paraListPtr->actualLength>=LIST_MAX_LENGTH)
{
printf("Cannot insert element: list full.\r\n");
return;
}//of if
//step 2.对存储位置进行检查
if(paraPosition<0)
{
printf("cannot insert element: nagative position unsupported.");
}
if(paraPosition>paraListPtr->actualLength)
{
printf("Cannot insert element: the position %d is bigger than the list length %d.\r\n",paraPosition, paraListPtr->actualLength);
return;
}//of if
//step 3.移动剩余的部分
for(int i=paraListPtr->actualLength;i>paraPosition;i--)
{
paraListPtr->data[i] = paraListPtr->data[i-1];
}//of for i
//step 4.开始插入
paraListPtr->data[paraPosition]= paraValue;
//更新顺序表的长度
paraListPtr->actualLength ++;
}//of sequentialListInsert
插入之后我们还要设计一个测试插入的函数来验证:
void sequentialInsertTest()
{
int i;
int tempArr