您的位置:首页 > 其它

链表(一)——创建一个最基本的单向链表

2014-07-14 21:33 295 查看
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:创建单向链表,最基本的实现方式。

#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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐