顺序线性表源码

来源:互联网 发布:程序员女生性格 编辑:程序博客网 时间:2024/06/06 13:02

顺序序线性表源码 (C++)

////Description:自定义顺序线性表//#include <iostream>#include <malloc.h>using namespace std;#define LIST_INIT_SIZE  5#define LISTINCREMENT 10typedef 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;}