who knows the truth。
Fork me on GitHub
返回顶部

C:结构体与链表

结构和链表(C语言)

1.结构

声明结构类型

  struct coord {
        int x;
        int y;
    };

定义结构类型变量

 struct coord {
        int x;
        int y;
    }first,second;
 struct coord {
        int x;
        int y;
    };
    struct coord first,second;

利用typedef为结构类型定义一个名称

typedef struct coord Coord;
    Coord first, second;

在定义结构变量的时候初始化

 Coord first={0,0}, second={1,2};
    Coord a={.x=1,.y=4};

结构成员运算符 .

 Coord first={0,0}, second={1,2};
    Coord a={.x=1,.y=4};
    first.x = 50;
    first.y = 100;
    printf("%d,%d",first.x,first.y);

也可以通过简单的赋值语句在相同类型的结构间复制信息

second = first

定义结构类型的指针,通过指针访问结构类型变量的成员,使用->运算符

 Coord *p;
    p = &first;
    p->x=15;
    p->y=20;
    printf("%d %d",first.x,first.y);

结构数组

  Coord point[2]={a,b};
    a.x=10;
    printf("%d",a.x);

2.链表

链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。

单链表的创建与遍历

每个元素本身由两部分组成:

  1. 本身的信息,称为“数据域”;
  2. 指向直接后继的指针,称为“指针域”
//单链表的创建与遍历
#include<iostream>
#include<stdlib.h>
struct node{
    int data;
    struct node *next;
};
typedef struct node Node;
int main(void)
{
    Node *head,*p,*q;
    p=(Node*)malloc(sizeof(Node));
    p->data=20;
    head=p;
    for(int i=1;i<3;i++)
    {
        q=(Node*)malloc(sizeof(Node));
        q->data=(i+2)*20;
        p->next=q;
        p=q;
    }
    p->next=NULL;
    printf("头结点地址:%#x",head);
    printf("链表结点地址:");
    for(Node *p=head;p!=NULL;p=p->next)
    {
        printf("%#x     ",p);
    }
    printf("链表结点的内容:");
    for(Node *p=head;p!=NULL;p=p->next)
    {
        printf("%d %#x",p->data,p->next);
    }
    return 0;
}
posted @ 2021-01-20 17:08  no_sense  阅读(127)  评论(0编辑  收藏  举报
欢迎来到kanashimi的博客
pic
kanashimi
真理将引领我们