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

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

链表(一)——创建一个最基本的单向链表,布布扣,bubuko.com

时间: 2024-11-05 12:10:45

链表(一)——创建一个最基本的单向链表的相关文章

链表(四)——带表头的单向链表

1.带表头的单向链表 (1)不带表头的单向链表在实现插入和删除时必须区分头结点和其他节点的处理. (2)使用带表头的单向链表的好处:不用考虑头结点的单独处理. 表头节点:数据域没有值,指针域指向单向链表中数据域含值的第一个结点. 2.代表头的单向链表的基本操作 #include <stdio.h> #include <malloc.h> #define NULL 0 typedef struct node { int data; struct node *next; }ElemSN

建立一个带头结点的单向链表,链表中的各结点按结点数据中的数据递增有序链接,函数fun的功能是:把形参x的值放入一个新结点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序

#include <stdio.h> #include <stdlib.h> #define N 8 typedef struct list { int data; struct list *next; } SLIST; void fun( SLIST *h, int x) { SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=x;将形参x赋给结点的数

C语言初级链表(之有头节点的单向链表)

1.结构体的基本特点:(结构体中可以嵌套一个别的结构体:  ..........可以嵌套一个别的结构体指针) (结构体中不可以嵌套一个自身类型的结构体(原因:确定不了结构体的内存大小): ..........可以嵌套一个指向自身类型的指针(原因:不同类型的指针在同一操作平台下所占内存相同,有确定值) 2.数据类型的本质:固定大小的内存块别名. 3.链表的基础特点:(结构体: 两个域:数据域.指针域:  引用自身的结构体:  特点:非线性存储) 4.链表编程关键两点: 1)指针指向谁,就把谁的地址

13输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4250795.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针. 题目分析: 1.链表的倒数第0个结点为链表的尾指针,设为r,则r指向最后一

菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t

Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:October 23h, 2014 1.ngx_list优势和特点 ngx_list _t是一个顺序容器,它实际上是动态数组和单向链表的结合体,扩容起来比动态数组简单的多,可以一次扩容一个数组,所以说它结合了 链表插入删除不需要移动的 和 数组下标快速索引 的优势,设计非常让人叫绝,此外它还有以下特点: 链表中存储的元素是灵活的,可以

菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t[转]

菜鸟nginx源码剖析数据结构篇(三) 单向链表 ngx_list_t Author:Echo Chen(陈斌) Email:[email protected] Blog:Blog.csdn.net/chen19870707 Date:October 23h, 2014 1.ngx_list优势和特点 ngx_list _t是一个顺序容器,它实际上是动态数组和单向链表的结合体,扩容起来比动态数组简单的多,可以一次扩容一个数组,所以说它结合了 链表插入删除不需要移动的 和 数组下标快速索引 的优势

c语言单向链表

一.链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称为“结点”,每个结点都应包括两个部分:一为用户需要用的实际数据,二为下一个结点的地址.因此,head指向第一个元素:第一个元素又指向第二个元素:……,直到最后一个元素,该元素不再指向其它元素,它称为“表尾”,它的地址部分放一个“NULL”(表示“空地址”),链表到此结束.        链表的各

数据结构和算法--3链表(单向链表、双向链表、环形单向链表和约瑟夫问题)

链表 链表是以节点的方式来存储 每个节点包含data域和next域,指向下一个节点 链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单向列表 最大特点是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能. 单链表分为两种:有头链表和无头链表. 有头节点的增删改查 定义一个单链表的类: //定义一个SingleLinkedList,单链表,管理HeroNode class SingleLinkedList{ //初始

链表(二):单向链表

一.什么是单向链表 在动态分配内存空间时,最常使用的就是“单向链表”(Single Linked List).一个单向链表节点基本上是由两个元素,即数据字段和指针所组成,而指针将会指向下一个元素在内存中的位置,如下图所示: 在“单向链表”中,第一个节点是“链表头指针”,指向最后一个节点的指针设为NULL,表示它是“链表尾”,不指向任何地方.例如列表A={a.b.c.d.x},其单向链表的数据结构如下图所示: 由于单向链表中所有节点都知道节点本身的下一个节点在哪里,但是对于前一个节点却没有办法知道