单链表————顺序表
什么是线性表?
是零个或者多个类型相同元素的又穷序列。
基本运算:
1. PSeqList createNullList_seq(int m)
创建并且返回一个空线性表。
2. int insert_seq( PSeqList palist, int p, DataType x )
在线性表list中下标为p前插入一个值为x的元素,并返回插入成功与否的标志。
3. int deleteP (List list, Position p )
在线性表list中删除下标为p的元素,并返回删除成功与否的标志。
4. Position locate ( List list, DataType x )
在线性表list中查找值为x的元素的位置。
5. int isNull ( List list )
判别线性表list是否为空表。
结构体定义
struct SeqList
{
int MAXNUM; //顺序表中最大元素的个数
int n; //存放线性表中元素个数n < MAXNUM
DataType *element; //元素
};
typedef struct SeqList* PSeqList; //指针类型
PSeqList palist;
建立顺序表
PSeqList createNullList_seq(int m){
PSeqList palist =(PSeqList)malloc(sizeof(SeqList));
if (palist!=NULL)
{
palist->element=(DataType*)malloc(m*sizeof(DataType));
if (palist->element)
{
palist->MAXNUM=m;
palist->n=0;
return palist;
}else free palist;
}
}
回收和分配内存
float *p;
p = (float*) malloc(m*sizeof(float));
free(p);
插入操作
int insert_seq( PSeqList palist, int p, DataType x ){
int q;
if(palist->n>=MAXNUM){
cout<<"溢出"<<endl;
return 0;
}
if (p<0||p>=palist->n)
{
cout<<"not exit"<<endl;
return 0;
}
for (q=palist->n-1; q >=p ; q--)
{
palist->element[q+1]=palist->element[q];//后移
}
palist->element[p]=x;//插入元素
palist->n=palist->n+1; //元素个数加一
return 1;
}
删除操作
int delete_seq( PSeqList palist, int p ){
if (p<0||p>palist->n-1)
{
cout<<"Not exits"<<endl; //不存在元素
return 0;
}
for (int q = p; q < palist->n-1; q++)
{
//移位,删除位置p的元素
palist->element[q]=palist->element[q+1];
}
palist->n =palist->n-1;//个数减1
return 1;
}
是否为空表
//判断顺序表是否为空
int isNullList_seq( PSeqList palist){
return palist->n==0;
}
优缺点:
顺序存储的优点:不需要附加空间,随机存取任一个元素;
缺点: 很难估计所需空间的大小,且开始就要分配足够大的一片连续的内存空间.
因上求缘,果上努力~~~~ 作者:图神经网络,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/12983677.html