频道栏目
首页 > 程序开发 > 软件开发 > C++ > 正文
链表(一)——创建一个最基本的单向链表
2014-07-15 11:01:22         来源:laoniu_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:创建单向链表,最基本的实现方式。

#include 
#include 

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

点击复制链接 与好友分享!回本站首页
相关TAG标签 单向
上一篇:hdu 1166 敌兵布阵
下一篇:HDU 1232:畅通问题(并查集)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站