数据结构

原创 2016年08月31日 10:26:28

数据结构

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。常见的数据结构如下:

队列

队列是一种特殊的线性结构,它只允许在队列的首部进行删除操作,这成为“出队”,而在队列的尾部进行插入操作,这称为“入队”。当队列中的中没有元素时,称为空队列。队列遵循先进先出原则(First In First Out FIFO)

队列的三个基本元素(一个数组,两个变量)

将这些元素封装成一个结构体类型

typedef struct {
    int data[100];
    int head;
    int tail;
}queue;

    queue a;
    a.head = 1;
    a.tail = 1;
    for (int i = 1; i <= 9; i++) {
        //依次向队列插入9个数
        scanf("%d",&a.data[a.tail]);
        a.tail++;
    }
    while (a.head < a.tail) {
        //打印队首并将队首出队
        printf("%d ",a.data[a.head]);
        a.head++;

        //先将新队首的数添加到队尾
        a.data[a.tail] = a.data[a.head];
        a.tail++;
        a.head++;
    }

栈是一种先进先出的数据结构,它限定只能在一段进行插入和删除操作。栈的实现很简单,只需要一个数组和一个指向栈顶得变量top就可以了,我们通过top来进行插入和删除操作。

    char a[101],s[101];
    int i,len,mid,next,top;

    gets(a);//读入一行字符串
    len = strlen(a);//求字符串的长度
    mid = len/2-1;//求字符串的中点

    top = 0;
    //将mid之前的字符依次入栈
    for (int i = 1; i <= mid; i++) {
        s[++top] = a[i];
    }

    //判断字符串的长度是奇数还是偶数,并找出需要进行字符匹配的起始下标
    if(len % 2 == 0){
        next = mid+1;
    }else{
        next = mid+2;
    }

    //开始匹配
    for (int i = next; i <= len-1; i++) {
        if (a[i]!=s[top]) {
            break;
        }
        top--;
    }

    //如果top的值为0,则说明栈内所有的字符都被一一匹配了
    if(top == 0){
        printf("YES");
    }else{
        printf("NO");
    }

链表

链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。

    struct node *head,*p,*q = NULL,*t;
    int i,n,a;
    scanf("%d",&n);
    head = NULL;
    for (i = 1; i <= n; i++) {
        scanf("%d",&a);
        p = (struct node *)malloc(sizeof(struct node));
        p->data = a;
        p->next = NULL;
        if (head == NULL) {
            head = p;
        }else{
            q->next = p;
        }
        q = p;
    }

    t = head;
    while (t != NULL) {
        printf("%d ",t->data);
        t = t->next;
    }


    return 0;

在链表中插入

    while (t != NULL) {
        if (t->next == NULL || t->next->data > a) {
            p = (struct node*)malloc(sizeof(struct node));
            p->data = a;
            p->next = t->next;
            t->next = p;
            break;
        }
        t = t->next;
    }

模拟链表

每个链表结点由两部分组成,一是本身的数据,二是他之后的数,我们之前用结构体来表示这个结点,在这里我们也可以用两个数组表示。思路:数组A表示每个序列中的数字,数组B则表示对应的的下一个结点的在数组A中的位置。

具体代码实现:

    int data[101],ringt[101];
    int i,n,t,len;
    //读入已有的数字
    scanf("%d",&n);
    for (i = 1 ; i <= n; i++) {
        scanf("%d",&data[i]);
    }
    len = n;
    //初始化数组right
    for (i = 1; i <= n; i++) {
        if (i!=n) {
            ringt[i] = i+1;
        }else{
            ringt[i] = 0;
        }
    }

    //直接在数组data的末尾增加一个数字
    len++;
    scanf("%d",&data[len]);

    //从链表的头部开始遍历
    t = 1;
    while (t != 0) {
        if (data[ringt[t]] > data[len]) {//如果当前结点下一个结点的值大于待插入的数,将数插入到中间
            ringt[len] = ringt[t];//新插入数的下一个结点标号等于当前结点的下一个标号
            ringt[t] = len;//当前结点的下一个结点编号就是新插入的书的编号
            break;//插入完成跳出循环
        }
        t = ringt[t];
    }

    //遍历链表
    t = 1;
    while (t!= 0) {
        printf("%d ",data[t]);
        t = ringt[t];
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

数据结构中的各种查找---总结篇

一、基本概念: 1、  列表:待搜索的数据集合。 2、  关键字:要查找的那个数据。 3、  查找:一种算法过程。 二、基于线性表的查找: 1、  顺序查找: (1)思想:逐个比较,直到找...
  • Angiexia
  • Angiexia
  • 2014年02月24日 14:16
  • 11936

【数据结构】几种常见的排序算法

一、排序算法的分类     下图是我掌握的一些排序算法,我将他们做了分类,当然,排序算法远不止这些。 本篇博客主要记录插入,选择,以及交换排序的冒泡排序,因为快排和归并算法相对复杂,所以,...
  • pointer_y
  • pointer_y
  • 2016年11月26日 23:06
  • 1469

数据结构——简介

数据结构——简介 1、几个基本概念 数据:数据是指计算机接受的输入数据,比如:整型、浮点型等数值类型以及声音、图像、视频等非数值类型的数据数据元素:是组成数据有一定意义的基本单位,比如一个人的...
  • qq_29721419
  • qq_29721419
  • 2017年04月08日 10:08
  • 498

数据结构和算法的选择

本部分总结前面介绍的数据结构和算法,并讨论在不同的情况下如何进行选择。 通用数据结构:数组、链表、树、哈希表 专用数据结构:栈、队列、优先级队列 排序:插入排序、希尔排序、快速排序、归并排序...
  • zhangyuehuan
  • zhangyuehuan
  • 2014年03月28日 15:21
  • 18223

数据结构清华大学公开课

有一个月左右的时间看完了这门课的视频,没有跟着学堂在线看,而是自己下载下来,慢慢看。看完后的第一感觉就是清晰,不得不说邓老师真的很用心的在上这门课。   最令我印象深刻是课件的制作,每种数据结构...
  • u010009320
  • u010009320
  • 2016年01月07日 11:43
  • 1309

数据结构常见面试题

链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力。链表的操作也离不开指针,指针又很容易导致出错。综合多方面的原因,链表题目在...
  • M1011566442
  • M1011566442
  • 2015年06月30日 17:13
  • 6535

数据结构全攻略--学好数据结构的必经之路

很多人在学习时一猛子扎进细节里无法自拔,以至于顾此失彼,丢了西瓜捡了芝麻。这种学习方法特别浪费时间,效率也非常低下,以至于在学习的长河中惨遭淘汰。如果这种人继续不思进取,那么在激烈的社会竞争环境中也会...
  • zhang_xinxiu
  • zhang_xinxiu
  • 2013年09月16日 09:23
  • 21928

再谈数据结构的重要性

那一年, 大二, 老师为了讲数据结构而讲数据结构, 学完了, 我真的是啥也不懂。 根本就不知道这门课有啥用。 后来, 通过自学, 逐渐了解并入门了数据结构, 一个简单的Josephus环让我对数据结构...
  • stpeace
  • stpeace
  • 2015年08月19日 19:48
  • 3118

树形菜单的数据结构实现方式

1、引言           树形菜单是WEB应用常见的一种功能导航展现方式,不管树形菜单用什么样的技术去实现,无论如何是跳不出以下两步的:第一、读取菜单数据;第二、展现菜单。实现菜单的展现有很多方...
  • zhimingli7938
  • zhimingli7938
  • 2013年10月10日 20:31
  • 2085

数据结构_列表(list)

介绍python数据结构中list的几个常用函数:如排序,增添元素,插值等等 1、选取任意一个或几个元素输出 注:下标从0开始,选取多个元素时,右边是开区间 2、以某一步长对列...
  • u014131641
  • u014131641
  • 2016年08月28日 10:44
  • 998
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构
举报原因:
原因补充:

(最多只允许输入30个字)