- 浏览: 75102 次
- 性别:
- 来自: 北京
#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
发表评论
-
排序算法---计数排序
2011-11-27 14:57 602#include <stdio.h> vo ... -
排序算法---归并排序
2011-11-26 19:33 740#include <stdio.h> vo ... -
排序算法---交换排序(冒泡排序、快速排序)
2011-11-26 19:32 699#include <stdio.h> vo ... -
排序算法---选择排序(简单插入排序、堆排序)
2011-11-26 19:31 643#include <stdio.h> vo ... -
排序算法---插入排序(简单排序、shell排序)
2011-11-26 19:29 643#include <stdio.h> vo ... -
删除字符串中的特定字符和重复字符
2011-11-26 13:45 660#include <stdio.h> vo ... -
Linux编程-多线程、同步和互斥(转载)
2011-11-14 15:27 1204http://www.cnblogs.com/skynet/a ... -
寻找字符串中的最大数字子串
2011-09-22 17:17 1513#include <stdio.h> int f ... -
删除子字符串
2011-09-21 15:27 599#include <stdio.h> #incl ... -
c语言随机数
2011-09-18 17:15 682#include <stdio.h> #i ... -
带头结点有序单链表的合并
2011-09-08 14:21 1178typedef int Item; typedef s ... -
链表逆序的递归/非递归算法
2011-09-01 23:37 1404/** *链表逆序的递归/非递归算法 */ # ... -
递归算法---字符串---全/部分组合和全排列
2011-08-30 23:01 1216#include <stdio.h> #i ... -
递归算法---0-1背包问题(面试宝典)
2011-08-28 21:11 1893/** *正整数n,m,从数列1、2、3、...、n中随 ... -
递归算法---字符串全组合(面试宝典)
2011-08-28 17:24 1251/** *求一字符串所有字串的组合 */ #i ... -
递归算法---求解多元一次方程
2011-08-28 10:38 1893/** * 求解x1+x2+x3+...+x10 = ... -
(zz)关于类的sizeof
2011-08-27 18:16 564http://blog.sina.com.cn/s/blog_ ... -
(zz)结构体字节对齐原则
2011-08-27 17:53 1576结构体默认的字节对齐一般满足三个准则: 结构体变量的首 ... -
list.h from linux-2.4
2011-08-25 09:59 602#ifndef _LIST_H_ #define _L ... -
The C Programming Lang (K&R) hash table
2011-08-25 09:52 931hash.h #include <stdio.h ...
相关推荐
下面将详细介绍如何使用C语言实现头插法建立单链表。 首先,我们需要定义一个链表节点结构体,它通常包含两个部分:数据域(data)用于存储元素值,指针域(next)用于指向下一个节点: ```c typedef struct Node ...
01头插法建立单链表.cpp
头插法创建单链表,可输入式,数据结构的基本操作,C++代码实现
1. 头插法建立单链表 头插法是指在链表的头部插入新的结点,使得链表的头部始终保持最新的结点。头插法的实现步骤如下: * 首先,判断头指针是否为空,如果为空,则直接将新结点赋给头指针,否则,将新结点的 next...
单链表的基本操作,单链表头插法、尾插法、创建、插入、删除、遍历
02尾插法建立单链表.cpp
creat1 函数使用头插法建立单链表,而 creat2 函数使用尾插法建立单链表。 接下来,我们实现了 print 函数,用于输出单链表中的数据。 最后,我们实现了 jsushu 函数,用于判断一个数是否是素数。 在 main 函数中...
根据给定文件的信息,本文将详细介绍“单链表建立头插法(C语言源代码)”这一主题,包括单链表的基本概念、头插法的具体实现原理及其C语言代码示例。 ### 单链表基本概念 单链表是一种线性表的数据结构,其每个元素...
实现单链表及其一些基本操作函数(带头结点) 1.头文件包含 2.宏定义及节点类型描述 ...10.尾插法和头插法建立单链表(包含初始化) 11.表长和简单打印 12.其他简单封装(_fz表示封装) main函数简单测试
自己写的,不怎么好,还请大家见谅!一下是单链表的定义: typedef struct LNode { ElemType data; struct LNode *next; }LinkList; LinkList *L,*head;
不带头结点,不带头结点,不带头结点! 实现单链表及其一些基本操作函数(不带头结点) ...10.尾插法和头插法建立单链表(包含初始化) 11.表长和简单打印 12.其他简单封装(_fz表示封装) main函数简单测试
接下来,我们讨论头插法建立单链表。与尾插法不同,头插法是在链表头部插入新节点。初始化时,链表头结点`L`指向空。每次读取数据元素`e`后,创建新节点`s`,将其插入到`L`的前面,然后更新`L`。这种方法的时间...
实现单链表的基本操作:头插法建立单链表、尾插法建立单链表、查找指定位置上的元素值、查找指定元素的位置、插入若干元素、删除若干元素、合并两个单链表、求两个合集的差、求单链表长度、逆置单链表、访问单链表各...
创建单链表,单链表逆序输入,最终正序输出。是用以独立函数写出
头插法建立单链表的思路是,从头结点开始,每次插入新的结点都将其插入到头结点之后,然后将新的结点设置为头结点的下一个结点。尾插法建立单链表的思路是,从头结点开始,每次插入新的结点都将其插入到尾结点之后,...
在上面的代码中,我们首先定义了链表结点的结构体,然后使用头插法建立单链表,最后使用 ExchangeList 函数将链表逆置。 双链表实现逆置 双链表是一种链式数据结构,它由多个结点组成,每个结点包含数据域、前驱...
给定代码实现了头插法创建单链表的功能。头插法是从链表头部开始插入新节点,使新节点成为链表的新头部。 ```c void creat_touchafa(LinkList L, int n) { int i; LinkList p; // 初始化链表头结点 L = ...
单链表的建立可以采用数组的方式进行建立,这种方法适用大多数单链表
`CreatListR1()`和`CreatList()`分别是用尾插入法和头插入法建立单链表的函数,`LocateNode()`用于查找特定值的结点,`DeleteList()`删除指定结点,`printlist()`打印链表,`DeleteAll()`则删除所有结点并释放内存。...