PTA练习题

函数题

带头结点链栈的操作

Status Push(LinkList L,ElemType e){
   
    LinkList p = (LinkList)malloc(sizeof(LinkList));
    p->data = e;
    p->next = L->next;
    L->next = p;
    return 1;
}

Status Pop(LinkList L,ElemType *e){
   
    LinkList p = (LinkList)malloc(sizeof(LinkList));
    if(L->next == NULL)
        return 0;
    p = L->next;
    *e = p->data;
    L->next = p->next;
    return 1;
}

递增的整数序列链表的插入

List Insert( List L, ElementType X ){
   
    List head = L;
    List p = (List)malloc(sizeof(List));
    p->Next=NULL;
    p->Data=X;
    while(L->Next!=NULL && L->Next->Data<=X){
   
        L=L->Next;
    }
    p->Next=L->Next;
    L->Next=p;
    return head;
}

两个有序链表序列的合并

List Merge( List L1, List L2 ){
   
    List L = (List)malloc(sizeof(List));
    List p = L;
    List a = L1->Next;
    List b = L2->Next;
    while(a!=NULL&&b!=NULL){
   
        if(a->Data<=b->Data){
   
            p->Next=a;
            a=a->Next;
        }
        else{
   
            p->Next=b;
            b=b->Next;
        }
        p = p->Next;
    }
    p->Next=a ? a:b;
    L1->Next=NULL;
    L2->Next=NULL;
    return L;
}

二分查找

Position BinarySearch( List L, ElementType X ){
   
    int high = L->Last;
    int mid,low=1;
    while(low<=high){
   
        mid=(low+high)/2;
        if(L->Data[mid]<X)
            low = mid + 1;
        else if(L->Data[mid]>X)
            high = mid-1;
        else
            return mid;
    }
    return NotFound;
}

线性探测法的查找函数

Position Find( HashTable H, ElementType Key ){
   
    int index = Hash(Key,H->TableSize);
    int size=0;
    while(size<H->TableSize){
   
        if(H->Cells[index].Info==Empty || H->Cells[index].Data==Key)
            return index;
        index = (index+1)%H->TableSize;
        size++;
    }
    return ERROR;
}	

二分查找(含排序)

void Sort(List L){
   
    int i,j,tmp;
    int n = L->Last;
    for(i=0;i<n-1;i++){
   
        for(j=0;j<n-i;j++){
   
            if(L->Data[j] > L->Data[j+1]){
   
                tmp = L->Data[j];
                L->Data[j] = L->Data[j+1];
                L->Data[j+1] = tmp;
            }
        }
    }
}
int BinarySearch(List L,int X ){
   
    int high=L->Last,mid,low=1;
    while(low<=high){
   
        mid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值