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

  • 相关阅读:
    Android Media Playback 中的MediaPlayer的用法及注意事项(二)
    Android Media Playback 中的MediaPlayer的用法及注意事项(一)
    34. Search for a Range
    33. Search in Rotated Sorted Array
    32. Longest Valid Parentheses
    31. Next Permutation下一个排列
    30. Substring with Concatenation of All Words找出串联所有词的子串
    29. Divide Two Integers
    28. Implement strStr()子串匹配
    27. Remove Element
  • 原文地址:https://www.cnblogs.com/trj14/p/4285177.html
Copyright © 2020-2023  润新知