图解数据结构

 采用分治思想:
https://www.cnblogs.com/chengxiao/p/6194356.html

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
 * @brief 主要是利用递归让两边均满足有序序列,然后再讲两个有序的序列排序放在在一个临时数组中
 * @param arr
 * @param left
 * @param right
 * @param temp
 */
 void sort(int arr[],int left,int right,int temp[])
{   int mid=0;
     if(left<right){
    mid=(left+right)/2;
    /*使两边都是排好序的*/
    sort(arr,left,mid,temp);
    sort(arr,mid+1,right,temp);
    /*将两边排好序的进行合并*/
    merge(arr,left,mid,right,temp);
     }
}
/**
 * @brief merge(分治思想)
 * @param arr
 * @param left
 * @param right
 * @param temp
 */
void merge(int arr[],int left,int mid,int right,int temp[])
{
  int i=left;
  int j=mid+1;
  int t=left;//临时下标
  while(i<=mid&&j<=right){
   if(arr[i]<arr[j]) {
       temp[t++]=arr[i++];
   }else{
       temp[t++]=arr[j++];
   }

  }
  /*将左右两边的剩下的数据放到临时数组中*/
  while(i<=mid){
      temp[t++]=arr[i++];
  }
  while(j<=right){
      temp[t++]=arr[j++];
  }
  //把temp中的内容拷给arr数组中
  //进行归并的时候,处理的区间是arr[left,right),对应的会把
  //这部分区间的数组填到tmp[left,right)区间上
  /*将temp中的元素全部拷贝到到原来的数组z*/
 memcpy(arr+left,temp+left,sizeof(int)*(right-left+1));
//  t=0; //和上面等价
//  while(left <= right){
//   arr[left++] = temp[t++];
//  }
}
int main()
{
    int arr[]={3,2,1};
    int len=sizeof(arr)/sizeof(arr[0]);
    int *temp=(int*)malloc(sizeof(int)*len);
    printf("%d\n",sizeof(arr)/sizeof(int));
    for(int i=0;i<sizeof(arr)/sizeof(int);i++){
        printf("%d ",arr[i]);
    }
    printf("\n");
    printf("after mergesort\n");
    sort(arr,0,len-1,temp);
    free(temp);
    for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){
        printf("%d ",arr[i]);
    }
    return 0;
}

 

数据结构是计算机科学中非常重要的概念之一,它用于组织和存储数据以便有效地操作和访问。Java语言提供了丰富的数据结构库,包括数组、链表、栈、队列、树、等。我将为你图解一些常见的数据结构及其在Java中的实现。 1. 数组(Array):数组是一种线性数据结构,它按照顺序存储相同类型的元素。在Java中,数组的大小在创建时就确定,并且可以通过索引访问和修改其中的元素。 2. 链表(Linked List):链表是一种动态数据结构,它由节点组成,每个节点包含数据和指向下一个节点的引用。在Java中,有单向链表和双向链表两种常见的实现方式。 3. 栈(Stack):栈是一种后进先出(LIFO)的数据结构,类似于我们生活中的一叠盘子。在Java中,可以使用Stack类或者使用LinkedList类来实现栈。 4. 队列(Queue):队列是一种先进先出(FIFO)的数据结构,类似于我们日常生活中排队等待的情况。在Java中,可以使用Queue接口或者使用LinkedList类来实现队列。 5. 树(Tree):树是一种非线性的数据结构,它由节点和边组成,每个节点可以有多个子节点。在Java中,常见的树结构包括二叉树、二叉搜索树(BST)、AVL树、红黑树等。 6. (Graph):是一种由节点和边组成的数据结构,节点表示实体,边表示实体之间的关系。在Java中,可以使用邻接矩阵或邻接表来表示,并通过深度优先搜索(DFS)或广度优先搜索(BFS)等算法来遍历。 这些只是数据结构中的一部分,Java还提供了其他更复杂的数据结构和算法库,可以根据具体需求选择合适的数据结构。希望以上图解能够帮助你更好地理解数据结构在Java中的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值