`
ackerman
  • 浏览: 75102 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

头插法建立单链表

 
阅读更多
#include <stdio.h>
#include <stdlib.h>
typedef struct {
	int id;
	char name[20];
}Item;

typedef struct node {
	Item data;
	struct node *next;
}Node, *List;

void initList(List *l)
{
	*l = (List)malloc(sizeof(Node));
	(*l) -> next = NULL;
}
void addFromHead(List *l, Item item)/*这里传l和l的指针效果一样*/
{
	Node *s;
	s = (Node *)malloc(sizeof(Node));
	s -> data = item;
	s -> next = (*l)->next;
	(*l)->next = s;
}

int listCount(List l)
{
	int i=0;
	while(l != NULL)
	{
		i++;
		l = l->next;
	}
	return i;
}

void reverseList(List *l)/*这里传l和l的指针效果相同*/
{
	Node *p1, *p2, *p3;
	p1 = (*l)->next;
	p2 = p1->next;
	p1->next = NULL;
	while (p2 != NULL)
	{
		p3 = p2->next;
		p2 ->next = p1;
		p1 = p2;
		p2 = p3;
	}
	(*l)->next = p1;
}

void freeList(List *l)
{
	Node * p ;
	while ((*l) != NULL)
	{
		p = (*l)->next;
		free(*l);
		(*l) = p;
	}
}
void showList(List l)
{
	while(l->next != NULL)
	{
		printf("\tList:%d,%s\n",l->next->data.id,l->next->data.name);
		l = l->next;
	}
}

int main()
{
	int i;
	List l = NULL;
	initList(&l);
	Item item[3] = {{1,"jerry"},{2,"tom"},{3,"ackerman"}};
	for (i=0; i<3; i++)
		addFromHead(&l,item[i]);
	printf("ListCount:%d\n",listCount(l));
	printf("Before reverse:\n");
	showList(l);
	reverseList(&l);
	printf("After reverse:\n");        
	showList(l);
	freeList(&l);
	return 0;
}

 输出结果:

ListCount:4
Before reverse:
	List:3,ackerman
	List:2,tom
	List:1,jerry
After reverse:
	List:1,jerry
	List:2,tom
	List:3,ackerman
分享到:
评论

相关推荐

    头插法建立单链表(C语言).zip

    下面将详细介绍如何使用C语言实现头插法建立单链表。 首先,我们需要定义一个链表节点结构体,它通常包含两个部分:数据域(data)用于存储元素值,指针域(next)用于指向下一个节点: ```c typedef struct Node ...

    01头插法建立单链表.cpp

    01头插法建立单链表.cpp

    数据结构C++头插法创建单链表(可输入式

    头插法创建单链表,可输入式,数据结构的基本操作,C++代码实现

    数据结构___头插法和尾插法建立链表(各分有无头结点).doc

    1. 头插法建立单链表 头插法是指在链表的头部插入新的结点,使得链表的头部始终保持最新的结点。头插法的实现步骤如下: * 首先,判断头指针是否为空,如果为空,则直接将新结点赋给头指针,否则,将新结点的 next...

    单链表的基本操作头插法尾插法创建插入删除遍历

    单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历

    02尾插法建立单链表.cpp

    02尾插法建立单链表.cpp

    用单链表列出素数(C语言)

    creat1 函数使用头插法建立单链表,而 creat2 函数使用尾插法建立单链表。 接下来,我们实现了 print 函数,用于输出单链表中的数据。 最后,我们实现了 jsushu 函数,用于判断一个数是否是素数。 在 main 函数中...

    单链表建立头插法(C语言源代码)

    根据给定文件的信息,本文将详细介绍“单链表建立头插法(C语言源代码)”这一主题,包括单链表的基本概念、头插法的具体实现原理及其C语言代码示例。 ### 单链表基本概念 单链表是一种线性表的数据结构,其每个元素...

    单链表(带头结点).cpp

    实现单链表及其一些基本操作函数(带头结点) 1.头文件包含 2.宏定义及节点类型描述 ...10.尾插法和头插法建立单链表(包含初始化) 11.表长和简单打印 12.其他简单封装(_fz表示封装) main函数简单测试

    单链表的定义,查找与删除

    自己写的,不怎么好,还请大家见谅!一下是单链表的定义: typedef struct LNode { ElemType data; struct LNode *next; }LinkList; LinkList *L,*head;

    数据结构:不带头结点单链表的实现及其一些基本操作.cpp

    不带头结点,不带头结点,不带头结点! 实现单链表及其一些基本操作函数(不带头结点) ...10.尾插法和头插法建立单链表(包含初始化) 11.表长和简单打印 12.其他简单封装(_fz表示封装) main函数简单测试

    2.3.2_3_单链表的建立 (2)1

    接下来,我们讨论头插法建立单链表。与尾插法不同,头插法是在链表头部插入新节点。初始化时,链表头结点`L`指向空。每次读取数据元素`e`后,创建新节点`s`,将其插入到`L`的前面,然后更新`L`。这种方法的时间...

    单链表的基本操作.cpp

    实现单链表的基本操作:头插法建立单链表、尾插法建立单链表、查找指定位置上的元素值、查找指定元素的位置、插入若干元素、删除若干元素、合并两个单链表、求两个合集的差、求单链表长度、逆置单链表、访问单链表各...

    创建单链表,逆序输入

    创建单链表,单链表逆序输入,最终正序输出。是用以独立函数写出

    数据结构作业 数据结构作业

    头插法建立单链表的思路是,从头结点开始,每次插入新的结点都将其插入到头结点之后,然后将新的结点设置为头结点的下一个结点。尾插法建立单链表的思路是,从头结点开始,每次插入新的结点都将其插入到尾结点之后,...

    数据结构单链表、双链表的逆置算法.doc

    在上面的代码中,我们首先定义了链表结点的结构体,然后使用头插法建立单链表,最后使用 ExchangeList 函数将链表逆置。 双链表实现逆置 双链表是一种链式数据结构,它由多个结点组成,每个结点包含数据域、前驱...

    单链表的创建、插入、删除

    给定代码实现了头插法创建单链表的功能。头插法是从链表头部开始插入新节点,使新节点成为链表的新头部。 ```c void creat_touchafa(LinkList L, int n) { int i; LinkList p; // 初始化链表头结点 L = ...

    单链表建立

    单链表的建立可以采用数组的方式进行建立,这种方法适用大多数单链表

    数据结构实验报告 - 答案.pdf

    `CreatListR1()`和`CreatList()`分别是用尾插入法和头插入法建立单链表的函数,`LocateNode()`用于查找特定值的结点,`DeleteList()`删除指定结点,`printlist()`打印链表,`DeleteAll()`则删除所有结点并释放内存。...

Global site tag (gtag.js) - Google Analytics