数据结构学习---顺序表

在准备考研的时候就想发学习笔记,想来已经过了多时。现在在培训班又要展开学习,说明一件事:408是指导学习研究计算机的基础!对于编写程序而言,数据结构与算法,是关键!我想其他的组成原理,计算机网络,操作系统也很重要,这是一个system,有必要有需要学习认真的学习之。希望这个是好的开始!

————————————————————————————————————————————————————————————————

昨天晚上看浙大在网易云课上的视频,没有上过浙大的我还是非常激动,哈哈,三个短视频看完之后,有几点我需要记下来的是:

1.数据结构和算法相辅相成。

2.存储换速度。

3.递归不是很好用,会爆栈。(想到严老师那本书里面把递归算法改成非递归算法就头疼,也是有原因的啊)

今天上课的时候我老师也让我们要学会模块化编程,统一化接口,学着像一个要正式上班的程序猿一样~~

——————————————————————————————————————————

线性表

  有顺序表和链表,在实际应用中,线性表都是以栈、队列、字符串、数组等特殊线性表的形式来使用的。

  当然,这篇文章我只是记录学习顺序表。

    特点:

1. 需要一块连续的空间

2. 每个元素都有一个直接前驱和直接后继,但是第一个元素没有前驱,最后一个元素没有后继。

3. 存储密度高,访问效率高

    这个很像我们经常接触的数组。一片连续的内存中存放数据类型相同的元素。

/*************************************************************************
	> File Name: Struct.h
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 10:23:25 AM CST
 ************************************************************************/

#ifndef _STRUCT_H_
#define _STRUCT_H_

#define SIZE 20
enum RETURNVAL
{
	ERROR = -1,
	OK,
	FALSE = 0,
	TRUE,
};
typedef int Status;
typedef int ElemType;
typedef struct LNode{
    int lenght;
    ElemType data[SIZE];
}SqList, *pSqList;
#endif

  定义结构体,相关宏定义~

#ifndef _FUN_H_
#define _FUN_H_
void insertToList(SqList * Line,int Location,int num);
void showItemFromList(SqList * Line);
pSqList InitList();
void menu();
void  destoryList(pSqList pList);
void delete(pSqList plink,int location , ElemType * DEL_data);
int searchFromList(pSqList plink, int num);
void updateItemInList(pSqList plink,int location,int number);
#endif

  申明函数  

/*************************************************************************
	> File Name: InitList.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 10:55:57 AM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"
#include<stdlib.h>
#include<string.h>
pSqList InitList()
{
    pSqList pList = (pSqList)malloc(sizeof(SqList));
    if (NULL != pList)
        memset(pList,0,sizeof(SqList));
    return pList;
}

void  destoryList(pSqList pList)
{
    if (NULL == pList)
        printf("destoryList failed");
    free(pList);
    pList = NULL;
}

  初始化函数---我没有设置成动态开辟malloc,设成了死的,以后补上动态开辟的,

  当然,有malloc  就有 free  ,我们时刻记住开辟的内存要还回去,这样不会造成内存泄漏~

/*************************************************************************
	> File Name: showItemFromList.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 10:24:39 AM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"
void showItemFromList(SqList * pList)
{
    int i;
    if (NULL == pList)
    {
        printf("there is nothing\n");
        return ;
    }
    printf("Liner List is \n");
    for(i = 0;i < pList->lenght;i++)
        printf("%d\t",pList->data[i]);
    printf("\n");
}

  显示函数---线性表的好处,一通到底。。

/*************************************************************************
	> File Name: insert.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 10:22:28 AM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"
#define SIZE 20
void insertToList(SqList * pLink,int Location,int num)
{
    int i;
    if (Location > pLink->lenght + 1
       ||(Location < 0)
       ||(pLink->lenght == SIZE)
       )
    {
        printf("dont input number in a mistakeble way");
    }
    else
    {
        for(i = pLink->lenght;i >= Location; i--)
            pLink->data[i] = pLink->data[i - 1];
        pLink->data[Location - 1] = num;
        pLink->lenght++;
    }
}

  插入函数,那些报错的代码,应该那样明白的写出来。

  这里就有顺序表的劣势了,和链表比起来,需要动的数据太多了。

/*************************************************************************
	> File Name: delete.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 03:58:51 PM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"
void delete(pSqList plink,int location , ElemType * DEL_data)
{
    if (location > plink->lenght)
	{
		printf("there are not %d in the link\n",location);
		return;
	}
	if ( NULL == plink
	||(location < 0)
	)
	{
		printf("illegal input");
		return;
	}
	*DEL_data = plink->data[location - 1];
    int i;
    if (location == SIZE)
    {
        plink->lenght--;
    }
    else
    {
        for(i = location - 1;i < plink->lenght;i++ )
            plink->data[i] = plink->data[i + 1];
        plink->lenght--;
    }
}

  删除 和插入差不多

/*************************************************************************
	> File Name: menu.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 11:28:05 AM CST
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
void menu()
{
    printf("1......insert\n");
    printf("2......show\n");
    printf("3......delete\n");
    printf("4......destory\n");
    printf("5......search\n");
    printf("6......updata\n");
    printf("please input you choise:\n");
}

  菜单~

/*************************************************************************
	> File Name: search.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 05:00:17 PM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"

int searchFromList(pSqList plink, int num)
{
    if (NULL == plink)
        return ERROR;
    int i;
    for( i = 0; i < plink->lenght ; i++ )
        if (num == plink->data[i])
            return i;
    printf("there isn‘t the number %d in the link\n",num);
}

  顺序表能立马找到数据的位置也是优势

/*************************************************************************
	> File Name: updateItemInList.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 05:10:49 PM CST
 ************************************************************************/

#include<stdio.h>
#include"Struct.h"

void updateItemInList(pSqList plink,int location,int number)
{
    if (NULL == plink)
        printf("error!");
    plink->data[location - 1] = number;
}

  和查找差不多!

  /*************************************************************************
	> File Name: Sort.c
	> Author: aaron
	> Mail: [email protected]
	> Created Time: Tue 14 Mar 2017 22:59:06 PM CST
 ************************************************************************/
#include"Struct.h"
#include<stdio.h>
int partition(pSqList plink, int low, int high){
    int pivotkey = plink->data[low];
    while (low < high) {
        while (low < high &&  plink->data[high] >= pivotkey ) --high;
        plink->data[low] = plink->data[high];
        plink->data[high] = pivotkey;

        while (low < high && plink->data[low] <= pivotkey ) ++low;
        plink->data[high] = plink->data[low];
        plink->data[low] = pivotkey;
    }
    return low;
}  

void quickSort(pSqList plink, int low, int high){
    int pivot;
    if(low < high) {
        pivot =  partition(plink,  low,  high);
        quickSort(plink,  low,  pivot - 1);
        quickSort(plink,  pivot + 1, high);
    }
}

  快速排序!看别人的哈哈   书上有算法~~

——————————————————————————————————————————————————————————————————后补上动态

时间: 2024-10-12 14:34:39

数据结构学习---顺序表的相关文章

数据结构。顺序表

#include <stdio.h>#include <stdlib.h> #define LIST_INIT_SIZE 100#define LIST_INCREMENT 10typedef struct Point   //element type{    int x;    int y;}Point;typedef Point ElemType;typedef struct          //list type{    ElemType *elem;     //data

Windows 已在 数据结构_顺序表.exe 中触发一个断点——new和delete注意事项

实现数据结构的顺序表的类时,输入,改,删,查都可以,但是最后析构函数时持续出错 错误提示"Windows 已在 数据结构_顺序表.exe 中触发一个断点" int *elem=new int(LIST_INIT_SIZE); if(!elem)cout<<"overflow"<<endl; if(leng>LIST_INIT_SIZE) cout<<"error"; else {    length=le

数据结构之顺序表

好不容易linux的课程结束了,下面就进入了数据结构的课程,对于没学过这本书的我,只能弱弱的说一句,数据结构真的好难,在学习的过程中,觉得最经典的一句话便是,数据结构+算法=程序.我只想说理解数据结构真的好难,太富有逻辑性了,有时候真的还需要发挥自己的空间想象能力,几天的学习,其实还算可以吧,下面我就给大家写一点线性表的基本操作吧,我尽可能的讲解的清楚一些,方便看的人有兴趣能有自己实现. #include <stdio.h> #include <stdlib.h> #include

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前

【数据结构】顺序表和链表

一.顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素.使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表.顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中. 顺序表可以分为静态顺序表和动态顺序表,静态较为简单,本文提供全部动态顺序表基本操作的代码. 顺序表的基本操作:

javascript数据结构之顺序表

关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间,然后将线性表放入其中,这样做便于线性表的存取,但是不利于插入和删除,而且在事先无法确定线性表长度的前提下可能会造成内存浪费或溢出. 这篇我是用javascript来实现线性表中的顺序表. 下面上代码: 1 var orderList = function(){ 2 var items = [];

数据结构:顺序表的基本操作

顺序表作业: #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int T; class SeqList{ private: T *data; int MaxSize; ///顺序表最多可以存放的元素个数. int last; ///顺序表最后一个元素的下标,初始值为-1. public: SeqList(int sz); void Input();

计蒜客课程数据结构(顺序表)

1.线性表是由相同数据类型的 n 个数据元素a0,a1,......,an-1 组成的有限序列.一个数据元素可以由若干个数据项组成.若用 L 命名线性表,则其一般表示如下: L=(a0,a1,......,an-1) 其中, a0?? 是唯一的“第一个”数据元素,又称为表头元素:an-1?? 是唯一的“最后一个”数据元素,又称为表尾元素. 线性表按照存储结构,可以分为顺序表和链表两种类型. 2.顺序表是在计算机内存中以数组形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构.