讲座总结(数据结构与算法概述)

本文概述了数据结构的概念,包括数据元素、数据对象和数据结构的逻辑结构,着重介绍了线性结构和非线性结构。接着讨论了算法的定义、特性以及设计要求,并详细阐述了链表的冒泡排序算法,包括其基本思想和操作步骤。
摘要由CSDN通过智能技术生成

一、数据结构及其概念

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。

数据:客观事物的符号表示

数据元素:数据的基本单位

数据对象:性质相同的数据元素的集合

数据结构:

是指相互之间具有一定联系的数据元素的集合。元素之间的相互关系称为逻辑结构。

数据的逻辑结构:
1、线性结构

(1)一般线性表

(2)受限线性表:

<1>栈             <2>队列            <3>串           <4>数组          <5>广义表


2、非线性结构

(1)集合

(2)树形结构

(3)图状结构

3、一般线性表的作用:存储数据

按照物理结构划分:连续式/非连续式

实现方式:使用连续内存/使用非连续内存



二、算法

1、算法:解决问题的步骤的描述,在计算机中表现为指令的有限序列

2、算法的特性:

(1):I/O:算法具有0个或多个输入,至少有一个输出

(2):有穷性:无死循环,能在可以接受的时间内完成

(3)确定性:算法的每一步骤都具有确定含义,不会出现二义性

(4)可行性:算法的每一步都必须是可行的

3、算法的设计要求:

(1)正确性      (2)可读性     (3)健壮性    (4)时间效率高。储存量低


三、链表

1、链表的冒泡排序  

对链表进行冒泡排序的基本思想就是对当前还未排好序的范围内的全部节点,自上而下对相邻的两个节点依次进行比较和调整,让键值(就是用它排 序的字段,我 们取学号num为键值)较大的节点往下沉,键值较小的往上冒。即:每当两相邻的节点比较后发现它们的排序与排序要求相反时,就将它们互换。

        单向链表的冒泡排序图示:
        ---->[1]---->[3]---->[2]...---->[n]---->[NULL](原链表)
       head   1->next  3->next  2->next   n->next

       ---->[1]---->[2]---->[3]...---->[n]---->[NULL](排序后链表)
       head   1->next  2->next  3->next   n->next

       图14:有N个节点的链表冒泡排序

      任意两个相邻节点p、q位置互换图示:
      假设p1->next指向p,那么显然p1->next->next就指向q,
      p1->next->next->next就指向q的后继节点,我们用p2保存
      p1->next->next指针。即:p2=p1->next->next,则有:
       [  ]---->[p]---------->[q]---->[  ](排序前)
       p1->next  p1->next->next  p2->next
       图15

       [  ]---->[q]---------->[p]---->[  ](排序后)

      1、排序后q节点指向p节点,在调整指向之前,我们要保存原p的指向节点地址,即:p2=p1->next->next;
      2、顺着这一步一步往下推,排序后图16中p1->next->next要指的是p2->next,所以p1->next->next=p2->next;
      3、在图15中p2->next原是q发出来的指向,排序后图16中q的指向要变为指向p的,而原来p1->next是指向p的,所以p2->next=p1->next;
      4、在图15中p1->next原是指向p的,排序后图16中p1->next要指向q,原来p1->next->next(即p2)是指向q的,所以p1->next=p2;
      5、至此,我们完成了相邻两节点的顺序交换。
      6、下面的程序描述改进了一点就是记录了每次最后一次节点下沉的位置,这样我们不必每次都从头到尾的扫描,只需要扫描到记录点为止。 因为后面的都已经是排好序的了。



2、链表的逆置

<span style="font-size:18px;"><strong>#include <stdio.h>  
#include <stdlib.h>  
  
typedef struct node {  
    int data;  
    struct node *next;  
}Node;  
  
  
//创建链表  
Node *CreatList(void)  
{  
    int val, i, n;  
    Node *phead, *p, *q;  
  
    phead = NULL;  
    printf("请输入您要建立的链表长度:\n");  
    scanf("%d", &n);  
    printf("请输入您要输入的数据:\n");  
    for(i=0; i<n; ++i)  
    {     
        scanf("%d", &val);  
        p = (Node *)malloc(sizeof(Node));  
        p->data = val;  
        if(NULL == phead)  
            q = phead = p;  
        else  
        q->next = p;  
        q = p;  
    }  
    p->next = NULL;  
    return phead;  
}  
  
  
//链表的逆置  
Node *ReverseList(Node *phead)  
{  
    Node *p, *q, *r;  
  
    p = phead;  
    q=r=NULL;  
  
    while(p)  
    {  
        q = p->next;  
        p->next = r;  
        r = p;  
        p = q;  
    }  
    return r;  
}  
  
  
//输出链表  
void ShowList(Node *phead)  
{  
    Node *p;  
   
    p = phead;  
    while(p)  
    {  
        printf("%d ", p->data);  
        p = p->next;  
    }  
    printf("\n");  
}  
  
  
int main(void)  
{  
    Node *phead;  
  
    phead = CreatList();  
    printf("链表逆置前的数据:\n");  
    ShowList(phead);  
  
    phead = ReverseList(phead);  
  
    printf("链表逆置后的数据:\n");  
    ShowList(phead);  
      
    return 0;  
}   

</strong></span>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警中心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥中心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值