1、多项式的ADT
类型声明
typedef struct NODE
{
int coeddicient;//系数
int Exponent;//次数
NODE* NEXT
}NODE;
2、基数排序
从最低位开始桶式排序,一直到最高位结束,按序输出。时间复杂度为O(P(N+B))(N为元素个数,B为桶数,P为排序的趟数)。
桶式排序的时间复杂度为O(N)。
3链表的游标实现
//链表声明
typedef struct NODE
{
ElementType Element;
int next;
} NODE
空间的建立
NODE arry[n]//n为需要的struct NODE的个数
游标型链表空间的建立
int alloc
{
int p;
p=arry[0].next;
arry[0].next=arry[p].next;
return p;//创建一个p处的链表
}
游标型链表的空间释放
void free(p)
{
arry[p].next=arry[0].next;
arry[0].next=p;
}/*将p插入以0为表头的初始链表。游标型的构造方法为一个以0为表头的初始链表和多个已经链接好的链表(0永远都不是构造的链表的单元)。从0后拿走单或者从0将单元放入0后。最后链表的结尾返回到0(不是null)*/
测试一个表是否为空表
int isempty(list L)//L为表头的游标
{
return arr[L].next==0;
}
测试p是不是链表的结尾
int islast(int p)
{
return arry[p].next==0;
}
find例程
find(ElementType x,list T)
{
int p;
p=arry[T].next;
while(arr[p].element==x&&arry[p].next==0)
p=arry[p].next;
return p;
}
删除例程
delet(element x,list L)
{
int p,temp;
p=findprecious(x,l);//找到被删除的单元的前驱元,找不到返回最后一个单元的地址
if( !islast(p,l) )
{
temp=arry[p].next;
arry[p].next=arry[temp].next;
free(temp);//把被删除项放到0后面。
}
}
插入例程
insert(elementType x,int p)
{
int temp;
temp=alloc();
if(temp==0)printf("out of space");
else
{
arry[temp].element=x;
arry[temp].next=arry[p].next;
arry[p].next=temp;
}
} //p为需要插入的地方的前驱元。