【C++】链表入门

1.结点
链表中用来存储一个数据的存储单元。
一个链表至少需要由两部分组成,就是数据域和指针域,一般形式的结点定义为:
struct node
{
Elem data; //Elem类型泛指基本数据类型
struct node *next;
}
typedef struct node Elemsn;
以上两步等价于:
typedef struct node
{
Elem data;
struct node *next;
}Elemsn;
2.使用指针变量p表示结点的成员
*p.data //错误,正确为(*p).data
p->data //正确
p->next //正确
注:(.)、(->)、([])三种运算符的优先级依次递减(这三个是C语言中优先级最高的运算符)。
3.前驱结点;某个结点的前一个结点。
后继结点:某个结点的后一个结点。
单向链表的特点:
(1)有且只有一个结点无前驱,即头结点。头结点通过head指针指向。
(2)有且只有一个结点无后继,即尾结点。尾结点的next域值为NULL。
(3)除了头结点尾结点之外剩下的所有结点有且只有一个前驱,有且只有一个后继。
4.例子

example 1:创建单向链表,最基本的实现方式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <malloc.h>
 
#define NULL    0
 
typedef struct node{
     int data;
     struct node *next; //不能使用ElemSN
}ElemSN;
 
int main()
{
     ElemSN *head, *p;
     int i, ms; /*ms用来存放结点的个数*/
     int x;
 
     printf( "Please input node number:" );
     scanf( "%d" , &ms);
 
     head = p = (ElemSN *)malloc(sizeof(ElemSN));
     printf( "Please input data:" );
     scanf( "%d" , &x);
     head->data = x;
     head->next = NULL; /*创建第一个结点,因为是头结点,和后面的结点有些不一样所以单独写出来*/
 
     for (i = 0 ; i < ms- 1 ; i++) /*创建后面的ms-1个结点*/
     {
         p->next = (ElemSN *)malloc(sizeof(ElemSN));
         printf( "Please input data:" );
         scanf( "%d" , &x);
         p->next->data = x;
         p->next->next = NULL;
         p = p->next;
     }
 
     for (p = head; p != NULL; p = p->next)
     {
         printf( "%d " , p->data);
     }
     printf( "\n" );
}</malloc.h></stdio.h>

http://www.2cto.com/kf/201407/317187.html
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值