码迷,mamicode.com
首页 > 编程语言 > 详细

C语言学习笔记-9.结构体

时间:2015-02-11 01:39:50      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

一、结构体的定义与使用

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

C语言学习笔记-9.结构体

标签:

原文地址:http://www.cnblogs.com/trj14/p/4285177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!