2016-941


2016-941

1.查找倒数第k个值

  • 一个带有表头结点的单链表,结点结构为(data,link)
  • 链表只给出了头指针list
  • 在不改变链表的前提下,查找出链表中倒数第k个位置上的结点
  • 若查找成功,输出该结点的data域的值,并返回1;否则,只返回0

(1)描述算法基本思想

  • 先求出链表的长度
  • 再用链表长度减去倒数第k个,就为倒数第k个的正向下标
  • 例如:链表长度为6,求倒数第2个值,即正数6-2=4下标
  • 在正向循环得出即可

(2)写出代码

(3)分析时间复杂性

typedef struct LNode{     //定义单链表结点类型
    int data;             //数据域
    struct LNode *link;   //指针域,指向下一个结点的指针
}LNode,*LinkList;         //LNode是结构体的别名,用LNode即可代替typedef struct LNode
                          //LinkList是结构体指针的别名,用LinkList指针代替struct LNode *next
int DaoshuK(LinkList listint k){
    int len = 0;
    int i = -1;//
    LNode *p = list, *q = list;   //p用来求链表长度,q开始查找倒数第k个值的下标
    while(p != NULL){             //求链表长度
        len++;
        p = p -> link;
    }
    while(q->link){
        i++;
        if(i == len-k){           //找倒数第k个值
            int data = q->data;
            return data,1;
        }
        q = q -> link;
    }
    return 0;    
}

2.输出二叉树序列S

  • 输出二叉树序列,以r为树根
  • 给出二叉树序列,输出二叉树

(1)算法思想

  • 引入一个辅助栈,以树的先序非递归遍历思想为基础,根据所给序列正向建树。
  • 若当前p指向结点非空,对应序号为0,则他的左右孩子赋值为空;
  • 对应序号为1,则创建一个结点,其左指针指向新创建的结点;
  • 若对应序号为2,则创建两个结点,其左右指针分别指向两个结点

(2)代码

BiTree CreateTree(BiTree &r,int A[],int len){
    //该算法根据数组A中序建树,序列长度就是数组长度len
    BiTree Stack[MaxSize];
    int top = -1;//栈初始化
    int i = 0;//计数值,判断序列结束
    BiTree p = r, bt = NULL;//p用来遍历,bt用来辅助创造结点
    while(p != NULL || top != -1 && i < len){
        if(p != MULL){
            if(A[i] == 0){
                p -> lchild = NULL;
                P -> rchild = NULL;
                Stack[++top] = p;
            }
            if(A[i] == 1){
                bt = (BiTree)malloc(sizeof(BiTree));
                p -> lchild = bt;
                P -> rchild = NULL;
                Stack[++top] = NULL;
            }
            if(A[i] == 2){
                bt = (BiTree)malloc(sizeof(BiTree));
                p -> lchild = bt;
                bt = (BiTree)malloc(sizeof(BiTree));
                P -> rchild = bt;
                Stack[++top] = p;
            }
            i++;
            p = p -> lchild
        }else{
            p = Stack[top--];
            p = p -> rchild;
        }
    }
    return r;
}

文章作者: 小冷同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小冷同学 !
用户交流区

温馨提示: 遵纪守法, 友善评论!