代码示例:
#include "iostream"
using namespace std;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define LIST_INIT_SIZE 20
#define OVERFLOW -2
#define LISTINCREMENT 10
typedef int Status;
typedef int ElemType;
typedef struct
{
ElemType *data;
int length;
int listsize;
} SqList;
Status initList(SqList *L)
{
L->data = (int *)malloc(LIST_INIT_SIZE * sizeof(int));
if (!L->data) exit(OVERFLOW);
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return OK;
}
Status listTraverse(SqList *L){
int i;
for (i = 0; i < L->length; i++){
printf("%d ", L->data[i]);
}
printf("\n");
return OK;
}
void free(SqList *L)
{
free(L->data);
L->length = 0;
}
Status listInsert(SqList *L, int i, ElemType e)
{
if (i < 1 || i> L->length + 1)
{
return ERROR;
}
if (L->length <= LIST_INIT_SIZE)
{
ElemType *newnode = (int *)realloc(L->data,(LISTINCREMENT + LIST_INIT_SIZE) * sizeof(int));
if (!newnode) exit(OVERFLOW);
L->data = newnode;
L->listsize += LISTINCREMENT;
}
ElemType *p = &(L->data[i - 1]);
ElemType *q;
for (q = &(L->data[L->length - 1]); q >= p; --q){
*(q + 1) = *q;
}
*p = e;
++L->length;
}
Status listDelete(SqList *L, int i, ElemType &e)
{
if (i < 1 || i > L->length)
{
return ERROR;
}
ElemType* p = &(L->data[i - 1]);
e = *p;
for (; p < &(L->data[L->length - 1]); p++){
* p = *(p + 1);
}
L->length--;
return OK;
}
void main()
{
SqList L;
ElemType e;
initList(&L);
cout << "初始化成功!"<< endl;
cout << "开始插入............................................." << endl;
listInsert(&L, 1, 10);
listInsert(&L, 2, 20);
listInsert(&L, 3, 30);
listInsert(&L, 4, 40);
listInsert(&L, 5, 50);
listInsert(&L, 2, 60);
cout << "插入完毕!" << endl;
cout << "打印线性表中的所有数据:";
listTraverse(&L);
cout << "开始删除............................................" << endl;
listDelete(&L, 3, e);
listDelete(&L, 5, e);
cout << "删除成功!" << endl;
cout << "删除后打印线性表中的所有数据:";
listTraverse(&L);
cout << "释放内存............................................" << endl;
free(&L);
cout << "释放内存完成!" << endl;
system("pause");
}
程序截图: