Linux 实验报告
一. 实验目的
了解并学习 Linux 系统的相关操作。
二. 实验设备
PC 机(Linux 系统)
三. 实验内容
通过数据结构实现 B+树,红黑树,堆排序等操作。
四. 实验源代码
/*
顺序表代码实现
*/
#include "SqList.h"
int Init_SqList(SqList *S, int DataType)
{
void *tPtr = NULL;//数据区临时指针
long i;
S->DataType = DataType;
switch (DataType)
{
case DATATYPE_CHAR:
if (!(tPtr = (char*)malloc(20 * sizeof(char))))
return ERROR;
break;
case DATATYPE_LONG:
if (!(tPtr = (long*)malloc(20 * sizeof(long))))
return ERROR;
break;
case DATATYPE_FLOAT:
if (!(tPtr = (float*)malloc(20 * sizeof(float))))
return ERROR;
break;
case DATATYPE_DOUBLE:
if (!(tPtr = (double*)malloc(20 * sizeof(double))))
return ERROR;
break;
case DATATYPE_CSTRING:
if (!(tPtr = (char**)malloc(20 * sizeof(char*))))
return ERROR;
for (i = 0; i < 20; i++)
((char**)tPtr)[i] = NULL;//C 字符串需要预先将指针清零
break;
default:
S->DataType = DATATYPE_INT;
case DATATYPE_INT:
if (!(tPtr = (int*)malloc(20 * sizeof(int))))
return ERROR;
break;
}
S->DataList = tPtr;
S->size = 20;
S->length = 0;
return NO_ERROR;
}
int Free_SqList(SqList *S)
{
Clear_SqList(S);//清空数据区
S->size = 0;
free(S->DataList);
S->DataList = NULL;
return NO_ERROR;
}
int Clear_SqList(SqList *S)
{
long i;
if (S->DataType == DATATYPE_CSTRING)
{//需要连带清空每个 C 字符串占有空间
for (i = 0; i < S->size; i++)
if (((char**)(S->DataList))[i])
free(((char**)(S->DataList))[i]);
}
S->length = 0;
return NO_ERROR;
}
int IsEmpty_SqList(SqList *S)
{
return !(S->length);
}
long GetLength_SqList(SqList *S)
{
return S->length;
}
void* GetData_SqList(SqList *S, long pos)
{
if (pos < 0 || S->length >= pos)
return ERROR;//越界报错
switch (S->DataType)
{
case DATATYPE_CHAR:
return (((char*)(S->DataList)) + pos);
break;
case DATATYPE_LONG:
return (((long*)(S->DataList)) + pos);
break;
case DATATYPE_FLOAT:
return (((float*)(S->DataList)) + pos);
break;
case DATATYPE_DOUBLE:
return (((double*)(S->DataList)) + pos);
break;
case DATATYPE_CSTRING:
return (((char**)(S->DataList)) + pos);