数据结构01_线性表_实验楼学习笔记

来源:互联网 发布:linux gtk编程 编辑:程序博客网 时间:2024/05/19 23:11

线性表

  • 简单的说线性结构是N各数据元素的有序集合有如下几个特征
  • 集合中必存在唯一的一个“第一元素”
  • 集合中必存在唯一的一个“最后的元素”
  • 除最后元素外,其他数据元素均有唯一的“后继”
  • 除第一元素之外,其他数据元素均有唯一“前驱”

线性表的链式表示和实现

  • 线性表的顺序存储结构是逻辑和物理位置都相邻,而链式存储结构是逻辑位置相邻,相比顺序的存储结构,它不能随机存取,但插入和删除操作时不需要移动元素,大大提高了增加删除元素的效率
  • 当向链表:每个元素只有一个指向后驱的指针(初开最后一个)
  • 循环链表:最后一个元素有一个指向后驱的指针指向的是头节点
  • 双向链表:每一个元素都有两个指针,一个指向前驱,一个指向后驱元素

课后练习:c语言实现最大连续

  • 穷举法,动态规划(动态规划是运筹学的一个分支,是求解决策过程最优化的数学法)
  • 代码


//

//  main.c

//  Data_structure_Day1

//

//  Created by apple on 2017/8/18.

//  Copyright © 2017 tongjian. All rights reserved.

//


#include <stdio.h>

//c语言实现最大子序列求和,子函数的声明

int Max_Sub (int a[],int leng);

int Max_Sub_mv (int a[],int leng);


int main(int argc, const char * argv[]) {

    // insert code here...

    int Test[] = {-2,11,-4,13,-5,2,-3,12,-9,-5};

    int Result_ex = Max_Sub(Test,10);

    int Result_mv = Max_Sub_mv(Test, 10);

    printf("最大顺序子序列和为/穷举%d=\n",Result_ex);

    printf("最大顺序子序列和为/动态规划=%d\n",Result_mv);

    

    printf("Hello, World!\n");

    return 0;

}

//穷举法

int Max_Sub (int a[]/*input*/,int leng/*input*/)

{

    int  result,max;

    result = max = 0;

    int i ,j,k;

    for (i= 0; i<leng; i++) {

        for (j = 0; j<leng-i; j++) {

            

            result = 0;

            for (k = 0; k<=i; k++) {

                result += a[j+k];

            }

            if (max < result) {

                max = result;

            }

        }

    }

    return  max;/*output*/

}

//动态规划

int Max_Sub_mv (int a[]/*input*/,int leng/*input*/)

{

    int sum ,max;

    int i;

    sum = max= 0;

    for (i=0; i<leng; i++) {

        if(sum > 0)

        {

            sum += a[i];

        }else

        {

            /*之前的顺序子序列和为负数*/

            sum = a[i];

            

        }

        if(max < sum)

            max = sum;

        

    }

    return  max;/*output*/

    

}