概述:
顺序表为线性表的顺序存储结构,且这种线性存储结构是一种随机存取的存储结构。
分析:一个一元多项式顺序表中有系数和指数
所以在构造顺序表之前,我们先要定义一个需要用到的变量的结构类型
#define MAXSIZE 100? ? ? ? ? ? //设置顺序表的最大长度
typedef struct???????????????????? ? ?? //创造一个结构类型
{
??? foat? coef;?????????????????????? ? ?? //系数
??? int expn;????????????????????????? ? ? //指数
}Ploynomial;?????????????????????? ? ?? //结构体类型为Ploynomial(名字)
当然,如果有别的需求可以将结构类型里的变量换一换,所以在以下的结构类型中,将以ElemType为名字表示关于变量的结构类型
一、创建顺序表
有了以上的结构类型,就可以定义一个多项式的顺序存储结构的类型了
#define MAXSIZE 100??????? //顺序表的最大长度(其实刚刚已经有定义了) typedef struct { ??? ElemType *elem;??????????? //开辟一个存储空间的基地址 ??????????????????????????????????? ? ? ?? //ElemTypp为刚刚创建了的结构类型 ??? int length;????????? ? ? ? ? ? ?? //用来存储顺序表的当前长度 }SqList;??????????? ? ? ? ? ? ?? ????? //顺序表的结构类型为Sqlist
然后将顺序表初始化,令这个初始化顺序表的函数名为InitList()
Status InitList(SqList &L)???????????????? //L为线性表,SqList为刚刚创建了的结构类型 {//构造一个空的顺序表 ??? L.elem=new ElemType[MAXSIZE];????????? //为顺序表分配一个大小为MAXSIZE的数组空间 ???
??? // C的写法为: ??? //L.data(Elemtype *malloc(sizeof(ElemType[MAXSIZE]))) ??? //malloc(m)------开辟m字节的长度的地址空间并返回首地址 ??? //sizeof(x)--------x长度 ??? if( !L.elem ) exit (OVERFLOW); ??? L.length=0; ??? return OK; }
二、顺序表的取值
Status GetElem(SQList L,int i,ElemType &e)
{//取值e,i为e所在的位置喜好
??? if( i<1 || i>L.length )? return ERROR;???? //i值不合法,返回ERROR
//i是顺序表的索引,顺序表再咋样i也不能小于1撒,同样i也不能大于线性表
??? e=L.elem[i-1];??????? //注意:elem[i-1]单元存储第i个元素,elem索引从0开始
??? return OK;
}
三、顺序表的插入
Status ListInsert(SqList &L,int i,ElemType e) { ??? if( (i<1)||(i>L.length+1)) return ERROR;??????? ? ? ? ?? //i值不合法 ??? if(L.length==MAXSIZE) return ERROR;??????????????? //当前的存储空间已满 ??? for(j=L.length-1;j>=i-1;j--) ??? { ??????? L.elem[j+1]=L.elem[j];???????????????????????? //把要插入的位置之后的元素往后移 ??? } ??? L.elem[i-1]=e;???????????????????????????????????? //将新元素e插入第i个位置 ??? ++L.length;??????????????????????????????????????? //表长加1 ??? return OK; }
四、顺序表的删除
Status ListDelete(SqList &L,int i) { ??? if((i<1)||(i>L.length)) return ERROR;??????? //i值不合法 ??? for(j=i;j<=L.length-1;j--) ??? { ??????? L.elem[j-1]=L.elem[j];?????????????????? //被删除元素后面的元素往前移(覆盖被删除元素) ??? } ??? --L.length;????????????????????????????????? //表长减1 ??? return OK; }
|