zoukankan      html  css  js  c++  java
  • C语言学习笔记-9.结构体

    一、结构体的定义与使用

    1.结构体内部的每个变量称为字段或成员变量

    2.定义方法:struct <结构体标记> {…};

                  或 typedef struct {…} <结构体类型名>;

       变量定义:struct <结构体标记> 变量1,2…

                  或 <结构体类型名> 变量1,2…

    3.成员变量的访问: x.成员变量名           (*px).成员变量名           px->成员变量名

       “->”称为指向运算符或箭头运算符

    4.不能直接比较(==、!=)两个结构体变量

    二、链表

    1.链表中的每个元素称为结点,每个结点包含两部分内容,一是用户需要使用的实际数据,二是下一个结点的起始地址

       另外还有一个头指针,用来指向链表的首结点

    例:

    struct tag
    {
        char name[12];    //结点描述信息
        struct tag *next;    //指向下一结点的指针
    }

    2.创建静态链表

    例:

    struct tag *Create (struct tag a[], int n)
    {
        struct tag *head = &a[0];
        int i;
        for (i = 0; i < n; ++i)
        {
            if(i < n - 1)
                a[i].next = &a[a + 1];
            else
                a[i].next = NULL;
        }
        return head;
    }
    int main()
    {
        struct tag array[10], *head;
        head = Create(array, 10);
        return 0;
    }

    注意:静态链表各结点在内存中连续存放,故可不用next指针,但这只是一个特例

    3.创建动态链表

    例:

    struct tag *Create ()
    {
        struct tag *head, *p, *q;
        head = p = q = NULL;
        while(1)
        {
            //输入结点信息
            if(...)
                break;    //判断结束输入跳出
            p = (struct tag *)malloc(sizeof(struct tag));
            p->var = var    //结点信息存储
            if(head == NULL)
                head = p;
            else
                q->next = p;
        }
        if(head != NULL)
            q->next = p;
        return head;
    }

    4.访问链表

    void display(struct tag *head)
    {
        struct tag *p;
        p = head;
        while(p != NULL)
        {
            //输出
            p = p->next;
        }
    }

    5.删除链表结点

    首结点:p = head;    head = p->next;    free(p);

    中间结点:令p指向待删除结点,q指向上一结点

                   q->next = p->next;    free(p);

    6.插入链表结点

    链表为空:head = pNode;

    插入至首位:pNode –> next = head;    head = pNode;

    插入至p, q之间:pNode –>next = p;    q->next = pNode;

    7.链表的释放

    例:

    void destroy(struct tag *head)
    {
        struct tag *p, *q;
        p = head;
        while(p != NULL)
        {
            q = p;
            p = p->next;
            free(q);
        }
    }

  • 相关阅读:
    [快捷键的使用] IntelliJ IDEA 将数据库里面的表转化为对象
    Mybatis事物浅谈
    CentOS7系统局域网内配置本地yum源解决cannot find a valid baseurl for repo
    CentOS6.5系统解决中文乱码问题
    tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    zabbix3.4.8中提示host [4gronghe_110] not found
    CentOS7.6系统安装详解(含真机装系统的采坑之旅)!
    windows server 2012 R2修改默认远程端口
    两个div并排,右边div固定宽度,左边宽度自适应
    两个div并排,左边div固定宽度,右边宽度自适应
  • 原文地址:https://www.cnblogs.com/trj14/p/4285177.html
Copyright © 2011-2022 走看看