ListLength(L)
#define MAX 100
typedef struct{
int *base;
int front;
int last;
}SqList;
int SqListlength(SqList L)
{ //链表中的元素个数
return (L.last-L.front+MAX)/MAX;
}
Status Get(Triplet T,int i,ElemType &e)
{返回链表的第i个值
T_len=ListLength(T);
if(i>T_len || i<0) return ERROR;
e=T[i-1];
return ok;
}
void union(List &La,List Lb)
{//将所有不在线性表La,但在Lb中的元素,转移到La中
La_len=ListLength(La);Lb_len=ListLength(Lb);
for(i=1;i<Lb_len;i++)
{
GetElem(Lb,i,e);//取出Lb中第i个元素赋值给e.
if(!LocateElem(La,e,equal))
ListInsert(La,++La_len,e);//不存在的进行插入
}
}
Ststus ListInsert_Sq(SqList &L,int i,ElemType e)
{//在顺序线性表L中第i个位置之前插入新元素e
if(i<1 ||i>L.Length+1)
return 0;//i不合法
if(L.length>=L.listsize)
{//存储空间已经满了,增加分配
newbase=(Elemtype *)realloc(L.elem,(L.listsize+Listsize)*sizeof(ElemType));
if(!newbase) exit (-1);//新空间开辟失败
L.elem=newbase;//新基趾
L.listsize+=Listsize; //增加存储容量
}
q=&(L.elem[i-1]);//q为插入位置
for(p=&(L.elem[L.length-1]);p>=q;--p)
*(p+1)= *p; //插入位置及之后的元素右移
*q=e;//插入e
++L.length;//表长增加1
return ok;
}
Status ListDelete_Sq(SqList &L,int i,ElemType &e)
{//删除第i个元素,并用e来进行返回
L_len=ListLength;
if(i<0 || i>L_len) return -1;
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;
return ok;
}
int ListDelete(LinkList &first,int i)
{//将链表第i个元素删除
ListNode *p,*q;
p=Locate(first,i-1);//寻找第i-1个结点
if(p==NULL || p->link==NULL)
return 0;//i的值不合理
q=p->link;//q此时指第i个元素
p->link=q->link;//删除结点
delete q;//释放
return 1;
}
Status ListDelete(List &L,int i,ElemType &e)
{//删除第i个元素,并用e来进行返回
ListNode *p,*q;
p=Locate(first ,i-1);
if(p==NULL || p->link==NULL)
return 0;
q=p->link;
e=*q;
p->link=q->link;
delete q;
return 1;
}
Status LocateElem_Sq(SqList L,ElemType e,Status(*compare)(ElemType,ElemType))
{//在链表中第一个与e满足compare()的元素的为序
i=1;//i的初始位序
p=L.elem;//p的初值为第一个元素的值
while(i<=L.length && !(*compare)(*p++,e))
i++;
if(i<=L.length) return i;
else return 0;
}
Ststus GetElem_L(LinkList L,int i,ElemType &e)
{//L为带头结点的单链表的头指针
p=L->next;j=1;//p指向第一个结点,j为计数器
while(p && j<i)//顺着指针找,直到p指向第i个元素或p为空
{
p=p->next;j++;
}
if(!p || j>i) return 0;//第i个元素不存在
e=p->data;//取出第i个元素
return ok;
}