您的位置:首页 > 编程语言 > C语言/C++

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

2015-02-11 00:28 260 查看

一、结构体的定义与使用

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: