采用严版数据结构书上定义的线性表动态分配存储结构,实现书中算法2.3——2.5。
IDE:VS2015
#include<iostream>
#include<stdio.h>
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define ElemType int
#define Status int
#define OK 1
#define ERROR 0
ElemType *newbase;
typedef struct
{
ElemType *elem;
int length;
int listsize;
}SqList;
//算法2.3 构造一个空的线性表
Status InitList_Sq(SqList &L)
{
L.elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
if (!L.elem) exit(OVERFLOW);
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return OK;
}
//算法2.4 实现动态线性表的插入操作
Status ListInsert_Sq(SqList &L, int i, ElemType e)
{
if (i<1 || i>L.length + 1)
return ERROR;
if (L.length >= L.listsize)
{
newbase = (ElemType *)realloc(L.elem, (L.listsize + LISTINCREMENT) * sizeof(ElemType));
if (!newbase)
exit(OVERFLOW);
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
ElemType *q = &(L.elem[i - 1]);
for (ElemType *p = &(L.elem[L.length - 1]); p >= q; --p)
*(p + 1) = *p;
*q = e;
++L.length;
return OK;
}
//算法2.5 实现线性表的删除操作
Status ListDelete_Sq(SqList &L, int i, ElemType &e)
{
if ((i < 1) || (i > L.length))
return ERROR;
ElemType *p = &(L.elem[i - 1]);
e = *p;
ElemType *q = L.elem + L.length - 1;
for (++p; p <= q; ++p)
*(p - 1) = *p;
--L.length;
return OK;
}
//输出线性表内容
void ListPrint(SqList &L)
{
ElemType *p = L.elem;
for (int i = 0; i <L.length; i++)
{
cout << *(p + i) << " ";
}
cout << endl;
}
//线性表创建,包含n个元素
void ListCreate(SqList &L, int n)
{
int i;
cout << "输入" << n << "个元素:" << endl;
for (i = 0; i < n; i++)
{
cin >> L.elem[i];
}
L.length = n;
}
void main()
{
SqList L1;
ElemType x = 0;
InitList_Sq(L1);
ListCreate(L1, 10);
cout << " La 初始化的顺序表:" << endl;
ListPrint(L1);
ListInsert_Sq(L1, 4, x);
cout << "增加的数:" << x << endl;
cout << "此时的顺序表 La :" << endl;
ListPrint(L1);
cout << endl;
ListDelete_Sq(L1, 6, x);
cout << "删除的数:" << x << endl;
cout << "此时的顺序表 La :" << endl;
ListPrint(L1);
cout << endl;
system("pause");
}