C语言学习笔记-9.结构体
2015-02-11 00:28
260 查看
一、结构体的定义与使用
1.结构体内部的每个变量称为字段或成员变量
2.定义方法:struct <结构体标记> {…};
或 typedef struct {…} <结构体类型名>;
变量定义:struct <结构体标记> 变量1,2…
或 <结构体类型名> 变量1,2…
3.成员变量的访问: x.成员变量名 (*px).成员变量名 px->成员变量名
“->”称为指向运算符或箭头运算符
4.不能直接比较(==、!=)两个结构体变量
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);
}
}
另外还有一个头指针,用来指向链表的首结点
例:
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语言指针学习笔记:指向结构体的指针
- C语言中的位运算&结构体浅析 — <编程之美>1.2学习笔记
- 黑马程序员_C语言学习笔记之结构体和枚举
- c语言学习笔记之结构体,枚举
- 【学习笔记】【C语言】结构体和函数
- 黑马程序员——ios学习笔记 C语言 结构体&链表&枚举
- 黑马程序员——C语言学习笔记06 结构体
- C语言学习笔记:22_结构体
- iOS开发学习笔记 2-8 C语言部分 联合 枚举 结构体
- 【C语言学习笔记】结构体、枚举、预处理指令
- C语言学习笔记——结构体
- C语言学习笔记(1)— 结构体注意点
- C语言学习笔记--------伊能C语言学习笔记------C语言结构体字节对齐机制
- iOS开发学习笔记 2-8 C语言部分 联合 枚举 结构体
- C语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数
- c语言学习笔记(10)——结构体
- C语言提高班学习笔记 lesson2 结构体
- C语言学习笔记10-结构体、枚举、联合体
- C语言学习笔记【结构体01】结构体变量与结构体数组
- 【学习笔记】【C语言】结构体的嵌套