【数据结构】考研代码总结

Chapter 2 线性表

2-1线性表的基本操作 书2.1.2

  • InitList(&L); //初始化线性表

  • Length(L); //求表长,返回表长

  • LocationElem(L,e); //按值查找,返回关键元素e的位置

  • GetElement(L,i); //按位查找,范围指定位置元素值

  • ListInsert(&L,i,e); //指定位置i插入指定的元素

  • ListDelete(&L,i,&e);//删除指定位置i的值,并用e返回被删除元素值

  • PrintList(L); //输出链表值

  • Empty(L); //判断量表是否为空,并返回TRUE或FALSE

  • DestroyList(&L);//销毁线性表,释放线性表所占的空间

2-2将La表与Lb表合并到La表中

void Union(SqList *La, SqList Lb){
    ElemType e;
    int La_len,Lb_len;
    int i;
     //求两个线性表的长度
     La_len = ListLength(*La);
     Lb_len = ListLength(Lb);
     for(i = 1; i < Lb_len; i++){
         e = GetElement(Lb,i);  //将第i个元素取出并赋值给e,每次变量e的值都会被修改
         if(!LocationElem(*La,e))   //在A中没有找到B的元素,则插入
            ListInsert(La,++La_len,e);  //在La的末尾插入
     }//for       
}

2-3已知线性表La和Lb的数据元素按值非递减排列

归并La和Lb得到新的线性表Lc,Lc的数据元素也按值非递减排

void MergeList(SqList La, SqList Lb, SqList *Lc)
{
    int i = 1, j = 1, k = 0;
    int La_len, Lb_len;
    ElemType ai,bj;
    InitList(Lc);
    //求两个线性表的长度
    La_len = ListLength(La);
    Lb_len = ListLength(Lb);
    while(i <= La_len && j <= Lb_len){
        ai = GetElement(La,i);
        bj = GetElement(Lb,j);
        if(ai <= bj){
            ListInsert(Lc, ++k, ai);
            ++i;
        }
        else{
            ListInsert(Lc, ++k, bj);
            ++j;
        }
        while( i <= La_len) //表La非空且表Lb空
        {
            ai = GetElement(La, i++);
            ListInsert(Lc, ++k, ai);
        }
while( i <= La_len) //表La非空且表Lb空
        {
            ai = GetElement(La, i++);
            ListInsert(Lc, ++k, ai);
        }
    }
}

Chapter 3 栈和队列

3-1 栈的基本操作

  • InitStack(&S) //初始化一个空栈
  • StackEmpty(S) //判断一个栈是否为空,返回
  • Push(&S,x) //进栈,若栈不满,则加入x,使x成为新的栈顶
  • Pop(&S,&x) //出栈,若栈不为空,则删除栈顶元素复制给x,并返回x
  • Getop(S,&x) //读出栈顶元素,若栈不为空,则将栈顶元素赋值给x,并返回x
  • DestroyStack(&S) //销毁栈

3-2 对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数

算法思路,将十进制取模8依次进栈,再输出

void conversion()
{
    SqStack s;
    unsigned n;
    ElemType e;
    InitStack(&s);
    scanf("%u",&n); //输入非负的十进制数
    while(n){   //当n不等于0,所有余数入展
        Push(&s,n%8);   //入栈(n/8)的余数(8进制的低位)
        n=n/8;
    }
    while(!EmptyStack(S)){  //当栈不为空时
        Pop(&s,&e); //将栈元素弹出并赋值给e
        printf("%d",e); //输出e
    }
    printf("\n");
}

3-3 对于输入的字符串检验括号是否成对出现(假设只有())

bool Match(char exp[],int n)
{
    int i = 0;
    char e;
    bool match = true;
    LinkStNode *st;
    while(i < n && match){
        if(exp[i]=='(')
            Push(st,exp[i]);
        else if(exp[i]==')'){
            if(GetTop(st,e)==true){
                if(e!='(')
                    match = false;
                else    
                    Pop(st,e)
            }
            else match = false;
        }
        i++;
    }
    if(!StackEmpty(st))
        match = false;
    DestroyStack(st);
    return match;
}

3-4 队列的基本操作

  • InitQueue(&Q) //初始化队列,构造一个空队列
  • QueueEmpty(Q) //判断队列是否为空,并返回TRUE或FALSE
  • EnQueue(&Q,x) //入队,若队列未满,则将x加入队列成为新的队尾
  • DeQueue(&Q,&x) //出队,若队列不空,则删除队头元素,并将队头元素赋值给x返回
  • GetHead(Q,&x) //读出队头元素,若队列非空则将队头元素赋值给x并返回

Chapter 4 树与二叉树

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容