ADT OrderList
{数据对象:
D={ai | 1<=i<=n , n>=0, ai为ElemType类型}
数据关系:
R={<ai,ai+1> | ai,ai+1 属于 D 且 ai<=ai+1,i=1,...,n-1}
基本运算:
InitList(&L):初始化有序表L。
DestroyList(&L):销毁有序表L。
ListEmpty(L):判断是否为空表。
ListLength(L):求有序表长度。
DispList(L):输出有序表。
GetItem(L,i,&e):求第i个数据元素值,用e返回L中第i个元素的值。
LocateElem(L,e):求第一个等于e的元素位置,无则为0。
ListInsert(&L,i,e):插入数据元素,在L中第i个位置插入e,L长度+=1.
ListDelete(&L,i,&e):删除数据元素,输出L中第i个元素,并用返回其值,L长度-=1.
}
插入算法
1)顺序表
void ListInsert(SqList *&L,ElemType e)
{
int i=0,j;
while(i<L->length && L->data!=e)
i++;
for(int j=ListLength(L);j>i;j--)
L->data[j]=L->data[j-1];
L->data[i]=e;
L->length++;
}
2)链表
void ListInsert(LinkNode *&L,ElemType e)
{
ListNode* pre=L,*p;
while(pre->next!=NULL && pre->next->data<e)
pre=pre->next;
p=(LinkNode*)malloc(sizeof(LinkNode));
p->data=e;
p->next=pre->next;
pre->next=p;
}