基本操作_单链表基本操作 - CSDN
精华内容
参与话题
  • 基本操作及概念

    2017-07-26 07:27:46
    一、桌面环境介绍 相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的...

    一、桌面环境介绍

    相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux 上的这套软件以前是 XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为 X11 或 X)实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache 。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境KDEGNOMEXFCELXDE 。

    二、Linux终端


    1.终端概念

    相对于现在的 Windows 系统,UNIX/Linux 本身是没有图形界面的,我们通常在 UNIX/Linux 发行版上看到的图形界面实际都只是运行在 Linux 系统之上的一套软件,类似 Windows95 之前的 Windows 的图形界面实则也只是运行在 DOS 环境的一套软件。而 Linux 上的这套软件以前是 XFree86,现在则是 xorg(X.Org),而这套软件又是通过 X 窗口系统(X Window System,也常被称为 X11 或 X)实现的,X 本身只是工具包及架构协议,而 xorg 便是 X 架构规范的一个实现体,也就是说它是实现了 X 协议规范的一个提供图形界面服务的服务器,就像实现了 http 协议提供 web 服务的 Apache 。如果只有服务器也是不能实现一个完整的桌面环境的,当然还需要一个客户端,我们称为 X Client,像如下几个大家熟知也最流行的实现了客户端功能的桌面环境KDEGNOMEXFCELXDE 。不过要注意的是这里所说的终端(Terminal)和控制台(Console)是有区别的。终端本质上是对应着 Linux 上的 /dev/tty 设备,Linux 的多用户登陆就是通过不同的 /dev/tty 设备完成的,Linux 默认提供了 6 个纯命令行界面的 “terminal”(准确的说这里应该是 6 个 virtual consoles)来让用户登录。在物理机系统上你可以通过使用[Ctrl]+[Alt]+[F1]~[F6]进行切换,不过在我们的在线实验环境中可能无法切换,因为特殊功能按键会被你的主机系统劫持。当你切换到其中一个终端后想要切换回图形界面,你可以按下[Ctrl]+[Alt]+[F7]来完成。

    2.Shell

    通常在图形界面中对实际体验带来差异的不是上述的不同发行版的各种终端模拟器,而是这个 Shell(壳)。有壳就有核,这里的核就是指 UNIX/Linux 内核,Shell 是指“提供给使用者使用界面”的软件(命令解析器),类似于 DOS 下的 command(命令行)和后来的 cmd.exe 。普通意义上的 Shell 就是可以接受用户输入命令的程序。它之所以被称作 Shell 是因为它隐藏了操作系统底层的细节。同样的 UNIX/Linux 下的图形用户界面 GNOME 和 KDE,有时也被叫做“虚拟 shell”或“图形 shell”。

    UNIX/Linux 操作系统下的 Shell 既是用户交互的界面,也是控制系统的脚本语言。当然这一点也有别于 Windows 下的命令行,虽然该命令行也提供了很简单的控制语句。在 Windows 操作系统下,有些用户从来都不会直接使用 Shell,然而在 UNIX 系列操作系统下,Shell 仍然是控制系统启动、X11 启动和很多其它实用工具的脚本解释程序。

    在 UNIX/Linux 中比较流行的常见的 Shell 有 bash、zsh、ksh、csh 等等,Ubuntu 终端默认使用的是 bash,默认的桌面环境是 GNOME 或者 Unity(基于 GNOME),但我们的环境中使用的分别是 zsh 和 xfce。

    3.命令行操作


    1)输入 输出

    输入当然就是打开终端,然后按键盘输入,然后按回车,输入格式一般就是这类的

    输出会返回你想要的结果,比如你要看什么文件,就会返回文件的内容。如果只是执行,执行失败会告诉你哪里错了,如果施行成功那么会没有输出

    #创建一个名为文件,touch是一个命令touch file 

    #进入一个目录,cd是一个命令cd /etc/

    #查看当前所在目录pwd

    2)开始

    打开终端运行shell

    3)快捷键

    【Tab】:使用Tab键来进行命令补全,Tab键一般是在字母Q旁边,这个技巧给你带来的最大的好处就是当你忘记某个命令的全称时可以只输入它的开头的一部分,然后按下Tab键就可以得到提示或者帮助完成。当然不止补全命令,补全目录、补全命令参数都是没问题的

    【Ctrl + C】:使用Ctrl+c键来强行终止当前程序(你可以放心它并不会使终端退出)。

    其他:

    Ctrl+d 键盘输入结束或退出终端
    Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行
    Ctrl+z 将当前程序放到后台运行,恢复到前台为命令fg
    Ctrl+a 将光标移至输入行头,相当于Home
    Ctrl+e 将光标移至输入行末,相当于End
    Ctrl+k 删除从光标所在位置到行末
    Alt+Backspace 向前删除一个单词
    Shift+PgUp 将终端显示向上滚动
    Shift+PgDn 将终端显示向下滚动
    4)历史输入命令

    使用键盘上的方向上键,恢复你之前输入过的命令。

    5)通配符

    通配符是一先使用 touch 命令创建 2 个文件,后缀都为 txt种特殊语句,主要有星号(*)和问号(?),用来对字符串进行模糊匹配(

    比如文件名、参数名)。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正字符.

    终端里面输入的通配符是由 Shell 处理的,不是由所涉及的命令语句处理的,它只会出现在命令的“参数值”里(它不能出现在命令名称里, 命令不记得,那就用Tab补全)。当 Shell 在“参数值”中遇到了通配符时,Shell 会将其当作路径或文件名在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符实际上就是一种 Shell 实现的路径扩展功能。在通配符被处理后, Shell 会先完成该命令的重组,然后继续处理重组后的命令,直至执行该命令。

    先使用 touch 命令创建 2 个文件,后缀都为 txt

    $ touch 123456.txt asdfg.txt

    可以给文件随意命名,假如过了很长时间,你已经忘了这两个文件的文件名,现在你想在一大堆文件中找到这两个文件,就可以使用通配符:

    $ touch adsfasd.txt wergjlkas.txt



    Shell 常用通配符:

    字符 含义
    * 匹配 0 或多个字符
    ? 匹配任意一个字符
    [list] 匹配 list 中的任意单一字符
    [!list] 匹配 除list 中的任意单一字符以外的字符
    [c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
    {string1,string2,...} 匹配 string1 或 string2 (或更多)其一字符串
    {c1..c2} 匹配 c1-c2 中全部字符 如{1..10}
    6)学会在命令行获得帮助

    在 Linux 环境中,如果你遇到困难,可以使用man命令,它是Manual pages的缩写。

    Manual pages 是 UNIX 或类 UNIX 操作系统中在线软件文档的一种普遍的形式, 内容包括计算机程序(包括库和系统调用)、正式的标准和惯例,甚至是抽象的概念。用户可以通过执行man命令调用手册页。

    你可以使用如下方式来获得某个命令的说明和使用方式的详细介绍:

    $ man <command_name>
    

    比如你想查看 man 命令本身的使用方式,你可以输入:

    man man
    

    通常情况下,man 手册里面的内容都是英文的,这就要求你有一定的英文基础。man 手册的内容很多,涉及了 Linux 使用过程中的方方面面。为了便于查找,man 手册被进行了分册(分区段)处理,在 Research UNIX、BSD、OS X 和 Linux 中,手册通常被分为8个区段,安排如下:

    区段 说明
    1 一般命令
    2 系统调用
    3 库函数,涵盖了C标准函数库
    4 特殊文件(通常是/dev中的设备)和驱动程序
    5 文件格式和约定
    6 游戏和屏保
    7 杂项
    8 系统管理命令和守护进程

    要查看相应区段的内容,就在 man 后面加上相应区段的数字即可,如:

    $ man 1 ls
    

    会显示第一区段中的ls命令 man 页面。

    所有的手册页遵循一个常见的布局,为了通过简单的 ASCII 文本展示而被优化,而这种情况下可能没有任何形式的高亮或字体控制。一般包括以下部分内容:

    NAME(名称)

    该命令或函数的名称,接着是一行简介。

    SYNOPSIS(概要)

    对于命令,正式的描述它如何运行,以及需要什么样的命令行参数。对于函数,介绍函数所需的参数,以及哪个头文件包含该函数的定义。

    DESCRIPTION(说明)

    命令或函数功能的文本描述。

    EXAMPLES(示例)

    常用的一些示例。

    SEE ALSO(参见)

    相关命令或函数的列表。

    也可能存在其它部分内容,但这些部分没有得到跨手册页的标准化。常见的例子包括:OPTIONS(选项),EXIT STATUS(退出状态),ENVIRONMENT(环境),BUGS(程序漏洞),FILES(文件),AUTHOR(作者),REPORTING BUGS(已知漏洞),HISTORY(历史)和 COPYRIGHT(版权)。

    通常 man 手册中的内容很多,你可能不太容易找到你想要的结果,不过幸运的是你可以在 man 中使用搜索/<你要搜索的关键字>,查找完毕后你可以使用n键切换到下一个关键字所在处,shift+n为上一个关键字所在处。使用Space(空格键)翻页,Enter(回车键)向下滚动一行,或者使用j,k(vim 编辑器的移动键)进行向前向后滚动一行。按下h键为显示使用帮助(因为 man 使用 less 作为阅读器,实为less工具的帮助),按下q退出。

    想要获得更详细的帮助,你还可以使用info命令,不过通常使用man就足够了。如果你知道某个命令的作用,只是想快速查看一些它的某个具体参数的作用,那么你可以使用--help参数,大部分命令都会带有这个参数,如:

    $ ls --help




    展开全文
  • halcon第一讲:基本操作

    万次阅读 多人点赞 2018-08-26 15:00:52
    本文通过Blob分析提取出图片中的硬币,来熟悉halcon的基本操作。 1、读取图像,halcon读取图像有三种方式:1)、文件-&gt;读取图像;2)、通过助手;3)、代码 *打开窗口 dev_open_window (0, 0, 512, 512, '...

    本文通过Blob分析提取出图片中的硬币,来熟悉halcon的基本操作。

    1、读取图像,halcon读取图像有三种方式:1)、文件->读取图像;2)、通过助手;3)、代码

    *打开窗口
    dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
    *读取图像
    read_image (Image,'1.png')

    读取的图像如下:

    2、rgb转灰度

    *rgb转灰度
    rgb1_to_gray (Image, GrayImage)

    3、二值化,通过灰度特征直方图(有阈值和缩放两个选项),阈值即对图像进行二值化,缩放即对图像进行图像增强

    *二值化
    threshold (GrayImage, Regions, 62, 255)

    4、二值化后为一个区域,一定要连接连通域,将区域打断(区域是没有像素值的,halcon中按住ctrl然后把鼠标指到图像中某一位置会显示其坐标和像素值)

    *连接连通域
    connection (Regions, ConnectedRegions)

    5、通过特征选择将感兴趣的连通域选择出来

    *特征选择
    select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 35619.1, 200000)

    6、区域填充

    *区域填充
    fill_up (SelectedRegions, RegionFillUp)

    7、显示面积及中心坐标

    area_center (RegionFillUp, Area, Row, Column)
    disp_message (WindowHandle, '面积:'+Area+'坐标:'+Row+','+Column, 'window', 0, 0, 'black', 'true')
    

    结果如下图所示:

    展开全文
  • Linux的基本操作——基本介绍

    万次阅读 2019-07-05 16:12:36
    打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!!一般都比市场价便宜3—7折【都是牌子货】,如果您感...单机操作系统 : windows(dos 、ucdos、win95、win98、win20...

    打个广告,帮朋友卖点东西,东西超便宜的哟【衣服鞋子等】,厂家直接出货,绝对低于市场价!!! 一般都比市场价便宜3—7折【都是牌子货】,如果您感兴趣,可以扫描屏幕下方的二维码,感谢关注!!!

    微信

    一、概述

    1、常见操作系统

    服务端操作系统 : linux、unix、windows server 

    单机操作系统 : windows(dos 、ucdos、win95、win98、win2000、xp、vista、win7、win8)

                             MAC 、linux(ubuntu)

    移动操作系统 Android、IOS 、Windows phone

    2、linux操作系统介绍

            Linux是一种自由和开放源码的类UNIX操作系统,它具有开放性,多用户,多任务,丰富的网络功能,可靠的系统安全,良好的可移植性,良好的用户界面(命令界面,图形界面等),出色的速度性能等优点。现在主要用于:

    • 大部分服务端都采用linux ,JEE部署到服务器中
    • 一些企业和学校采用linux研发和教学
    • 很多嵌入式开发 用linux 
    • 云计算、大数据 是集群网  linux : centos 

    Linux组成为:

    • linux内核(linus 团队管理)
    • shell :用户与内核交互的接口
    • 文件系统 : ext3、ext4 等  windows 有 fat32  、ntfs 
    • 第三方应用软件 

    Linux操作系统版本由内核版本 (linus 团队管理)和发行版本组成 (一些软件公司以内核为基础,再添加一些软件和文档形成发行版本),常见的发行版本有:

       - red hat  : rhel ,centos

       - debian   : debian,ubuntu(桌面)

       - android

    二、Linux系统环境

           默认有6个命令交互通道和一个图形界面交互通道,默认进入到的是图形界面通道其中:

    • 命令交互模式切换:ctrl+alt+f1---f6
    • 图形交互界面 ctrl+alt+f7

    1、图形界面交互模式

    • terminal: 图形界面的命令终端,它是图形界面交互通道的延伸,要依赖于图形界面

    2、命令交互模式 

    • 命令提示符:

          shen@ubuntu:~$ 

            - shen:用户名

    - ubuntu :主机名

    - ~  :路径 ,假如当前的路径正好是 该用户存放数据的根目录 ,则显示~

    - $ :用户的类型  $代表普通用户  #  代表 超级用户

    三、常用命令

    (按tab建自动补全)

    1、注销、关机、重启

    • 注销 :logout(登出 )或者exit(退出)

     

    • 关机 :shutdown - h  时间

      - h :关机

      - 时间 :

        1. now :马上

        2. 12.30 :指定具体时间

        3. 3  :几分钟以后

     

    注意:关机并不是每个用户都可以完成的,需要超级用户或者被授权的用户来执行该命令,普通用户要由超级用户配置  sudo 命令才能执行关机操作(权限放在这里/etc/sudoers),当普通用户被授权后即可通过【sudo shutdown -h now】来完成操作,sudo表示用超级用户的权限(被赋予的)来执行某命令,类似window中的以管理员身份运行

     

    • 重启 :shutdown -r  时间(权限问题和上面类似)

    2、系统命令

    • passwd   :设置密码

     ubuntu默认 root账号是没有开启 ,只要设置root密码即可开启【sudo passwd root】

    • su  :切换用户

    如su root ,root用户切换到其他账号不需要密码

    • sudo apt-get update

    更新系统

    • who与whoami

    其中

    who : 查看在线的用户

    whoami :查看当前自己的用户,如

     其中tty2代表哪个窗口(ctrl+alt+f2),pts/1表示图形化界面中开启的终端。

    • hostname : 显示主机名
    • uname  :显示系统信息

            -a :显示完整的系统信息

    • top :显示当前耗时的进程(部分)的信息 ,每3秒刷新一次,类似windows的任务管理器 (cltr+c 中断 )
    • ps :显示当前进程(全部)的快照 

           - axu

    • df :磁盘使用情况(disk free)
    • ifconfig :查看或者配置网卡信息 ,好比windows 的ipconfig
    • ping  测试与目标主机连接情况

    如测试本机与虚拟机中的连接情况,(本机ip:169.254.64.182,虚拟机ip:172.25.0.95),在虚拟机终端中,测试

    ping 169.254.64.182【按Ctrl+c结束】,在本机(cmd)中 ping 172.25.0.95

    •   netstat:网络连接详细信息
    • clear:清除屏幕(windows: cls)  
    • man:帮助命令

    可以查看命令的参数,如man ls

    • kill:杀死进程(kill  pid )
    • useradd:添加用户 

    首先来查看用户信息,命令为 sudo cat /etc/passwd,以其中一个用户信息介绍

     hadoop:x:1000:1000:UbuntuA,,,:/home/hadoop:/bin/bash

      - hadoop:用户名

      - x :密码 :已经加密 ,密码存放在  /etc/shadow 

      - 1000: 账号id ,userId

      - 1000: 组id ,group id

              - UbuntuA,,,  :账号描述

              - /home/hadoop :该账号存放文件的默认位置  ~

      - /bin/bash:该用户的shell脚本的解析方式  ,sh 、bash、rbash

     

    然后再来创建用户(以创建"lijing"用户为例),步骤如下:

    1.创建 /home/lijing 目录(在home下创建“lijing”文件)

    2. 执行 useradd 命令

       -d :指定该用户的home 路径 

       - s :该用户的shell解析方式

    3. 用 passwd 设置密码

    4. su 切换用户

    展开全文
  • 数据结构系列-队列的基本操作

    万次阅读 多人点赞 2018-03-20 07:31:52
    队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。所以说队列是一个先进先出的线性表,相应的也有顺序存储和链式存储两种方式。顺序存储就是用...

    队列(Queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。允许插入的端是队尾,允许删除的端是队头。

    所以说队列是一个先进先出的线性表,相应的也有顺序存储和链式存储两种方式。

    顺序存储就是用数组实现,比如有一个n个元素的队列,数组下标0的一端是队头,入队操作就是通过数组下标一个个顺序追加,不需要移动元素,但是如果删除队头元素,后面的元素就要往前移动,对应的时间复杂度就是O(n),性能自然不高。

    为了提高出队的性能,就有了循环队列,什么是循环队列呢?就是有两个指针,front指向队头,rear指向对尾元素的下一个位置,元素出队时front往后移动,如果到了对尾则转到头部,同理入队时rear后移,如果到了对尾则转到头部,这样通过下标front出队时,就不需要移动元素了。

    同时规定,当队列为空时,front和rear相等,那么队列什么时候判断为满呢?按照循环操作rear依次后移,然后再从头开始,也是出现rear和front相等时,队列满。这样跟队列空的情况就相同了,为了区分这种情况,规定数组还有一个空闲单元时,就表示队列已满,因为rear 可能在front后面,也可能循环到front前面,所以队列满的条件就变成了(rear+1)%maxsize = front ,同时队列元素个数的计算就是(rear -front+maxsize)%maxsize。

    如下是循环队列的数据结构及基本操作实现:

    #include "stdio.h"    
    #include "stdlib.h"   
    #include "io.h"  
    #include "math.h"  
    #include "time.h"
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define MAXSIZE 11 //初始容量
    
    typedef int Status;
    typedef int QElemType;//定义数据类型
    
    //循环队列的顺序存储结构
    typedef struct{
    	QElemType data[MAXSIZE];
    	int front; //头指针
    	int rear;//尾指针,队列非空时,指向队尾元素的下一个位置
    }SqQueue;
    
    Status visit(QElemType item){
    	printf("%d",item);
    	return OK;
    }
    
    //初始化空队列
    Status InitQueue(SqQueue *sQ){
    	sQ->front =0;
    	sQ->rear =0;
    	return OK;
    }
    
    //将队列清空
    Status ClearQueue(SqQueue *Q){
    	Q->front = Q->rear =0;
    	return OK;
    }
    
    //判断队列是否为null
    Status QueueEmpty(SqQueue Q){
    	if(Q.front == Q.rear)
    		return TRUE;
    	else
    		return FALSE;
    }
    
    //返回队列中的元素个数
    int QueueLength(SqQueue Q){
    	return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
    }
    
    //返回队头元素
    Status GetHead(SqQueue Q, QElemType *e){
    	if(Q.front == Q.rear)//是否为空队列
    		return ERROR;
    	*e = Q.data[Q.front];
    	return OK;
    }
    
    //在队尾插入元素
    Status EnQueue(SqQueue *Q, QElemType e){
    	if((Q->rear+1)%MAXSIZE == Q->front)//队列已满
    		return ERROR;
    
    	Q->data[Q->rear] =e;//插入队尾
    	Q->rear = (Q->rear +1)%MAXSIZE;//尾部指针后移,如果到最后则转到头部
    	return OK;
    }
    
    //元素出队
    Status DeQueue(SqQueue *Q, QElemType *e){
    	if(Q->front == Q->rear)//队列空
    		return ERROR;
    	*e = Q->data[Q->front];//返回队头元素
    	Q->front = (Q->front+1)%MAXSIZE;//队头指针后移,如到最后转到头部
    	return OK;
    }
    
    //遍历队列元素
    Status QueueTraverse(SqQueue Q){
    	int i = Q.front;
    	while((i+Q.front) != Q.rear){
    		visit(Q.data[i]);
    		i=(i+1)%MAXSIZE;
    	}
    	printf("\n");
    	return OK;
    }
    
    int main(){
    
    	Status j;
    	int i=0,l;
    	QElemType d;
    	SqQueue Q;
    	InitQueue(&Q);
    
    	//入队10个元素
    	for(int i =0;i< MAXSIZE-1; i++){
    		EnQueue(&Q,i);
    	}
    	QueueTraverse(Q);
    
    	printf("依次出队:");
    	for(l=1;l<=MAXSIZE;l++)
    	{
    		DeQueue(&Q,&d);
    		printf("d= %d,",d);
    	}
    
    	return 0;	
    }

    循环队列要事先申请好空间,整个过程都不能释放,而且要有固定的长度,如果长度事先无法估计,这种方式显然不够灵活;所以就引入了链式存储队列,其实就是线性表的单链表,只是它只能对尾进,队头出。并且规定队头指针指向链队列的头结点,对尾指针指向终端节点,当队列为空时,front和rear都指向头结点。

    入队操作,就是在链表尾部插入结点;出队操作就是头结点的后继结点出队,然后将头结点的后继后移。如果最后除了头结点外,只剩一个元素了,就把rear也指向头结点。

    数据结构及基本操作:

    #include "stdio.h"    
    #include "stdlib.h"   
    #include "io.h"  
    #include "math.h"  
    #include "time.h"
    
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    #define MAXSIZE 20 
    
    typedef int Status; 
    typedef int QElemType; 
    
    //结点结构
    typedef struct QNode{
    	QElemType data;
    	struct QNode *next;
    }QNode,*QueuePtr;
    
    //队列的链表结构
    typedef struct{
    	QueuePtr front;//队头
    	QueuePtr rear;//对尾
    }LinkQueue;
    
    Status visit(QElemType e)
    {
    	printf("%d ",e);
    	return OK;
    }
    
    //初始化空的队列
    Status InitQueue(LinkQueue *Q){
    	Q->front = Q->rear = (QueuePtr)malloc(sizeof(QNode));
    	if(!Q->front)
    		exit(OVERFLOW);
    	Q->front->next =NULL;
    	return OK;
    }
    
    //销毁队列
    Status DestroyQueue(LinkQueue *Q){
    	while(Q->front){
    		Q->rear=Q->front->next;//从队头开始销毁
    		free(Q->front);
    		Q->front = Q->rear;
    	}
    	return OK;
    }
    
    //清空队列,队头指针还在
    Status ClearQueue(LinkQueue *Q){
    	QueuePtr p,q;
    	Q->rear =Q->front;//跟初始状态相同,Q->rear指向头结点
    	p=Q->front->next;//开始销毁队头元素,队头,对尾依然保留
    	Q->front->next =NULL;
    	while(p){
    		q=p;
    		p=p->next;
    		free(q);
    	}	
    	return OK;
    }
    
    //队列是否空
    Status QueueEmpty(LinkQueue Q){
    	if(Q.front == Q.rear)
    		return TRUE;
    	else
    		return FALSE;
    }
    
    //取队列长度
    int QueueLength(LinkQueue Q){
    	int i=0;
    	QueuePtr p = Q.front;
    	while(Q.rear != p){
    		i++;
    		p = p->next;
    	}
    	return i;
    }
    
    //获取队头元素
    Status GetHead(LinkQueue Q,QElemType *e){
    	QueuePtr p;
    	if(Q.front == Q.rear)//队空
    		return ERROR;
    	p=Q.front->next;
    	*e = p->data;
    	return OK;
    }
    
    //对尾插入元素
    Status EnQueue(LinkQueue *Q,QElemType e){
    	QueuePtr s = (QueuePtr)malloc(sizeof(QNode));
    	if(!s)
    		exit(OVERFLOW);
    	s->data = e;
    	s->next =NULL;
    	Q->rear->next =s;//原来对尾的next指向新的元素
    	Q->rear =s;//将新元素变为对尾
    	return OK;
    }
    
    //队头元素出队
    Status DeQueue(LinkQueue *Q,QElemType *e){
    	QueuePtr p;
    	if(Q->front == Q->rear)
    		return ERROR;
    	p=Q->front->next;//p指向队头元素
    	*e = p->data;
    	Q->front->next = p->next;//头结点的后继指向队头的下一个元素
    	if(Q->rear == p){//队头等于对尾了
    		Q->rear = Q->front;//对尾指向头结点
    	}	
    	free(p);
    	return OK;
    }
    
    //遍历元素
    Status QueueTraverse(LinkQueue Q){
    	QueuePtr p;
    	p=Q.front->next;
    	while(p){
    		visit(p->data);
    		p=p->next;
    	}
    	printf("\n");
    	return OK;
    }
    
    int main(){
    	int i;
    	QElemType d;
    	LinkQueue q;
    	i=InitQueue(&q);
    	
    	//入队10个元素
    	for(int index=0;index<MAXSIZE;index++){
    		EnQueue(&q,index);
    	}
    	QueueTraverse(q);
    
    	DestroyQueue(&q);
    	printf("队列已经销毁,q.front=%p q.rear=%p\n",q.front, q.rear);
    	
    	return 0;
    }


    展开全文
  • 数据结构:顺序表的基本操作

    万次阅读 多人点赞 2018-05-04 12:01:53
    线性表的顺序存储 顺序表的线性存储示意图 C语言定义线性表的顺序存储结构 ... 线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表在逻辑结构上相邻的元素存储在连续的物理...
  • Monogo——基本操作

    千次阅读 2018-06-05 10:45:32
    mongodb的基本操作数据库相关操作查看系统中已有数据库show dbs 创建数据库mydbuse mydb 删除当前数据库db.dropDatabase() 集合相关操作查看当前数据库已有集合show collections 创建集合coll1(也可以不创建,在插入...
  • Xcode基本操作入门力作

    万次阅读 2016-07-02 12:07:10
    这是弦苦大师的最全的Xcode基本操作介绍,转载一下链接,以后用来膜拜学习~~~Xcode基本操作-_-#大神是用来膜拜的!!!
  • kettle基本操作(详尽版)

    万次阅读 2018-11-27 16:47:00
    kettle基本操作(详尽版) 注意以上这些,基本上可以正常连接了,而且通过sql语句查询到的数据中文不会乱码 删除线格式 以下是转换的基本操作
  • Pr的5种基本操作

    万次阅读 2018-08-07 18:41:02
    如何简单的载入舞台、创建序列、添加标题、调整音频层级以及输出视频 1. 载入舞台 学习如何聪明的将你的素材载入Pr中,包括载入Adobe Stock中的图片或视频 新建项目 -&amp;amp;amp;amp;...
  • MapGIS入门教程——基础操作

    千次阅读 2019-06-05 16:23:09
    1.基础设置 视窗及时刷新 符号的同步缩放
  • JAVAEE真实课堂系列之JDBC

    万人学习 2018-10-22 21:38:09
    本课程主要介绍JAVAEE中的基础知识 数据库的连接操作,其中知识点包括 jdbc操作步骤 jdbc工具类封装 事务处理 mysql事务隔离级别 mysql过程调用 批处理 连接池 DbUtils的讲解 MVC架构的基础思想
  • ps的基本操作和知识

    千次阅读 2019-11-04 17:43:23
    前端有时候也需要一些基本的ps基础知识的。有时候需要自己去抠图,切图之类的小操作。 1. 矩形选框操作区域必须先选中该区域所在图层,才可进行相应操作。 2. 裁剪工具不分图层。ps的常用快捷键(window系统下) ...
  • 操作系统常见面试和笔试题

    万次阅读 2017-09-06 13:22:36
    操作系统是编程最重要的基础之一,操作系统相关知识广泛应用在程序设计、系统调优、问题追查、性能优化等重要场景中,一个不懂操作系统的程序员不可能写出优秀的代码,更不可能设计出优秀的系统架构,所以操作系统...
  • 1.在视口中经常物体被转没了找不到了 解决:使用【按名称选择】的方式选择要找的物体,然后按【Z】键把物体对其到视野中央 2.把多个物体进行合并 选中其中一个物体(比如选择sphere),右键 ...
  • PLSQL基本操作手册,适合小白

    千次阅读 2019-06-13 10:42:42
    刚开始学习plsql,有很多不懂的知识,目前看到好的文章记录帖 适合刚刚开始用 https://blog.csdn.net/YHC2113/article/details/80779789
  • 《软件测试基本功》系列教程

    万次阅读 2011-05-26 20:06:00
    《软件测试基本功》系列教程 - 第2章 操作系统基础: http://www.docin.com/p-210059238.html<br />  《软件测试基本功》系列教程 - 第3章 数据库基础: ... 《软件测试基本功》系列教程 - ...
  • 是引用类型 ,基础类型与引用类型的区别是,基础类型只表示简单的字符或数字,引用类型可以是任何复杂的数据结构 ,基本类型仅表示简单的数据类型,引用类型可以表示复杂的数据类型,还可以操作这种数据类型的行为...
  • 栈的基本结构与基本操作

    万次阅读 多人点赞 2019-01-31 09:59:40
    栈也是一种特殊的线性表,但不同的是,栈的操作与传统的线性表不同。传统的线性表可以完成随机位置存取,而栈的结构决定了它进行操作的特点:仅仅在表尾进行插入或删除操作(后进先出)。表尾端称作栈顶,而与之相对...
  • 实时系统的基本特性

    万次阅读 2011-09-01 10:30:54
    在特定时间内完成特定的任务,实时性与可靠性。 所谓“实时操作系统”,实际上是指操作系统工作时,其各种资源可以根据需要随时进行动态分配...应该说,实时操作系统是在早期的操作系统基础上发展起来的,早期的操作
  • 计算机操作系统是计算机专业必修的专业基础课程,是考研的必考科目。它的特点是概念多、较抽象和涉及面广,所以无论是大学学习还是考研,很多同学都把它当做一块硬骨头,其实只要我们掌握正确的学习方法,操作系统...
1 2 3 4 5 ... 20
收藏数 4,168,442
精华内容 1,667,376
关键字:

基本操作