标签:
#include<iostream.h> //线性表的基本操作 #include <stdlib.h> #include <stdio.h> #define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量 #define LISTINCREMENT 10 //线性表存储空间的分配增量 typedef struct{ int *elem; //存储空间基址 int length; //当前长度 int listsize; //当前分配的存储容量(以sizeof(ElemType)为单位) }SqList; int InitList_Sq(SqList &L) { // 构造一个空的线性表L。 L.elem = new int[LIST_INIT_SIZE]; if (!L.elem) exit(1); // 存储分配失败 L.length = 0; // 空表长度为0 L.listsize = LIST_INIT_SIZE; // 初始存储容量 return 0; } //InitList_Sq int ListInsert_Sq(SqList&L, int i, int e) { if (i < 1 || i > L.length+1) return 1; // i值不合法 if (L.length>= L.listsize) { // 当前存储空间已满,增加容量 int* newbase = (int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof (int)); if (!newbase) exit(1); L.elem = newbase; // 新基址 L.listsize += LISTINCREMENT; // 增加存储容量 } int* q = &(L.elem[i-1]); // q为插入位置 for (int*p = &(L.elem[L.length-1]); p>=q; --p) *(p+1) = *p; // 插入位置及之后的元素右移 *q = e; // 插入 ++L.length; // 表长增1 return 0; } int ListDelete_Sq(SqList&L, int i, int&e) { // 在顺序线性表L中删除第i个元素,并用e返回其值。 // i的合法值为1≤i≤ListLength_Sq(L)。 int *p, *q; if (i<1 || i>L.length) return 1; // i值不合法 p = &(L.elem[i-1]); // p为被删除元素的位置 e = *p; // 被删除元素的值赋给e q = L.elem+L.length-1; // 表尾元素的位置 for (++p; p<=q; ++p) *(p-1) = *p; // 被删除元素之后的元素左移 --L.length; // 表长减1 return 0; } void Traverse(SqList L){ //逐个输出顺序线性表L的元素。 cout<<"La:"; for(int i=0;i<L.length;i++) cout<<L.elem[i]<<" "; } void main(){ SqList La; InitList_Sq(La); //构造线性表La int a[6] = {1,4,8,3,2,0}; for(int i=1;i<7;i++){ ListInsert_Sq(La,i,a[i-1]); //插入元素 } Traverse(La); //逐个输出顺序线性表L的元素。 cout<<endl; int m; ListDelete_Sq(La, 3, m); //删除元素 cout<<"删除元素后"; Traverse(La); cout<<" 删除的元素为:"<<m<<endl; //输出 }
标签:
原文地址:http://www.cnblogs.com/123lele/p/4907101.html