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);
        }
    }

  • 相关阅读:
    我也设计模式——5.Prototype
    宋史目录
    ASP.NET 2.0 读书笔记 圣殿 之 HtmlHead & HtmlMeta
    SQL2005 读书笔记
    AJax调试
    WEB前端开发规范文档(转)
    ASP.NET的错误处理机制(转)
    asp.net面试集合
    Power Designer的使用
    运行常用命令
  • 原文地址:https://www.cnblogs.com/trj14/p/4285177.html
Copyright © 2011-2022 走看看