顺序序线性表源码 (C++)
//
//Description:自定义顺序线性表
//
#include <iostream>
#include <malloc.h>
using namespace std;
#define LIST_INIT_SIZE 5
#define LISTINCREMENT 10
typedef struct{
int * elem;
int length;
int listsize;
}SqList;
//---------------------函数声明--------------------------
void input(SqList &L);
void output(SqList &L);
int InitList_Sq(SqList &L);
int ListInsert_Sq(SqList &L, int i, int e);
int ListDelete_Sq(SqList &L, int i, int &e);
//----------------------声明全局变量-------------------------
int *p=NULL, *q=NULL;
//-------------------------主函数-----------------------------
void main()
{
cout << "========================线性表=================" << endl;
cout << "**************该线性表中定义的数据类型为整型******************" << endl;
cout << "\n~~~~~~~线性表的初始化操作~~~~~~~~\n";
SqList L;
InitList_Sq(L);
input(L);
output(L);
cout << "\n~~~~~~~线性表的插入操作~~~~~~~~\n";
cout << "请输入欲插入元素的位置" << endl;
int i, e;
cin >> i;
cout << "请输入欲插入元素的值" << endl;
cin >> e;
ListInsert_Sq(L, i, e);
output(L);
cout << "\n~~~~~~~线性表的删除操作~~~~~~~~\n";
cout << "请输入欲删除元素的位置" << endl;
cin >> i;
int d;//d为欲删除元素的值
ListDelete_Sq(L, i, d);
output(L);
cout << "操作中删除的元素位置为\t" << i << ",其值为\t" << d << endl;
}
int InitList_Sq(SqList &L)
{
L.elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if (!L.elem)return 0;
L.length = 0;
L.listsize = LIST_INIT_SIZE;
return 1;
}
void input(SqList &L)
{
int i = 0;
for (i = 0; i<L.listsize; i++)
{
cout << "输入第" << i << "个数字:" << endl;
cin >> L.elem[i];
}
L.length = i;
}
void output(SqList &L)
{
cout << "\n线性表中的数据元素为:\n" << endl;
for (int j = 0; j<L.length; j++)
{
cout << "第" << j << "个数字为:" << L.elem[j] << "\t";
}
cout << endl;
cout << "当前分配的存储容量为" << L.listsize << "\t" << "当前长度为" << L.length << endl;//---------------------
}
//--------------------------插入操作----------------------------
int ListInsert_Sq(SqList &L, int i, int e)
{
if (i<1 || i>L.length + 1)
{
return 0;
}
if (L.length >= L.listsize)
{
int * newbase = (int *)realloc(L.elem, (L.listsize + LISTINCREMENT)*sizeof(int));
if (!newbase)
{
return 0;
}
L.elem = newbase;
L.listsize += LISTINCREMENT;
}
q = &(L.elem[i - 1]);
for (p = &(L.elem[L.length - 1]); p >= q; --p)
{
*(p + 1) = *p;
}
*q = e;
++L.length;
return 1;
}
//------------------------删除操作------------------------------
int ListDelete_Sq(SqList &L, int i, int &e)
{
if ((i<1) || (i>L.length))
return 0;
p = &(L.elem[i - 1]);
e = *p;
q = L.elem + L.length - 1;
for (++p; p <= q; ++p)
*(p - 1) = *p;
--L.length;
return 1;
}