2020-11-28数据结构算法的一些题目(仅用于学习)

1、试编写算法:将两个有序顺序表归并成一个有序顺序表

 //c是假设已经建好的长度足够大的线性表
void mergeArry(int a[],int m,int b[],int n){ //归并两个线性表
    int i = 0 , j = 0 ; 
    int k = 0 ; 
    //第一个循环执行完毕,至少有一恶搞线性表的值已经归并好了,好需要将另一个线性表剩下的值存到新的线性表
    while (i

2、试编写算法:将两个带头结点的单链表按data域从小到大的顺序进行链接

Node * merge(Node * h1, Node * h2) {
  if (h1 == NULL) return h2;
  if (h2 == NULL) return h1;
  Node * head;
  if (h1->data>h2->data) {
    head = h2; h2=h2->next;
  } else {
    head = h1; h1=h1->next;
  }
  Node * current = head;
  while (h1 != NULL && h2 != NULL) {
    if (h1 == NULL || (h2!=NULL && h1->data>h2->data)) {
      current->next = h2; h2=h2->next; current = current->next;
    } else {
      current->next = h1; h1=h1->next; current = current->next;
    } 
  }
  current->next = NULL;
  return head;
}

3、设采用二叉链表存储二叉树,每个节点含有4个域,分别为lchild,data,rchild,bal.其中lchild指向左孩子,data存放数据,rchild指向右孩子,bal存储相应结点的平衡因子,bal=左子树高度-右子树高度,试编写算法,求二叉树中每个节点的平衡因子,并存入相应结点的bal域中。

4、已知A为无序线性表,采用顺序存储结构。请设计算法,删除其中所有的负数(注意负数可能有多个)

// 传入线性表,因为要删除这个表改变他的值,所以用引用型
void delet(int &list[] , int n ){
    int listTemp[n];//定义一个大小和list相同的线性表
    int k = 0
    for(int i = 0 ; i < n ; i ++) {
        if(list[i] > 0 || list[i] == 0){
            listTemp[k] = list[i] ;
        }
    }
    list = listTemp;
}

5、已知字符串s采用单向链表结构,结点的数据域为字符型。模式串t采用顺序存储结构。请设计模式匹配算法,在s中查找t的起始地址。

6、已知二叉树的数据域为整数类型,其中只有一个结点的数据值最大。请设计算法,查找该结点的地址。

//遍历二叉树找到最大值
//传入用来遍历的结点p ,和用来得出最大值的结点max, maxKey为第一个结点的值
void r(BTNode* p , &BTNode* max , int maxKey){
    if(p != NULL){
        r(p-> lChild);
        r(p-> rChild);
        if(maxKey < p -> data){
            max = p
        }
    }
}

7、请简述堆排序的算法思想,并给出对于下列关键字序列进行堆排序的过程{21,25,49,25,16,8}

8、试编写算法,从一个有序表中删除其值在给定值s和t(要求s小于t)之间的所有元素

void delet(int &list[] , int n ){
    int listTemp[n];//定义一个大小和list相同的线性表
    int k = 0
    for(int i = 0 ; i < n ; i ++) {
        if(list[i] > 0 || list[i] == 0){
            listTemp[k] = list[i] ;
        }
    }
    list = listTemp;
}

9、假定二叉树采用二叉链表存储结构,设计一个算法,在二叉树中查找关键值为key的结点的父结点

void r(BTNode* p , int key){
    if(p != NULL){
        r(p-> lChild);
        r(p-> rChild);
        if(key < p -> key){
            return p
        }
    }
}

你可能感兴趣的:(2020-11-28数据结构算法的一些题目(仅用于学习))