C:链表的操作,如何创建一个链表并打印
2012-02-18 14:11
190 查看
链表是一种常见的重要的数据结构,它是动态的进行内存存储分配的一种结构。
用数组存放数据时,必须事先定义固定的长度(即元素个数),但是事先难以确定有多少个元素时,则必须把数组定义的足够大,以保证成功。
无疑,这会造成内存浪费,然而,链表则没有这种缺点,它可以根据需要,动态开辟内存单元。
链表中的各个元素在内存中是可以不是连续存放的,但是要找到某一元素,必须知道它的地址,这就需要链表必须有一个头指针(head)。
今天我就开始介绍一系列的链表操作,包括链表的创建,链表的输出,链表的删除,链表的插入等等。
通过学生学号和成绩来表现这一过程。
链表的创建:
#include “stdlib.h”
#include “stdio.h”
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
struct student *creat(void)
{
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);
scanf(“%ld,%f”,&p1->num,&p1->score);
head=NULL;
while(p1->num != 0)
{
n=n+1;
if(n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student *)malloc(LEN);
scanf(“%ld,%f”,&p1->num,&p1->score);
}
p2->next = NULL;
return(head);
}
void main()
{
creat();
}
这样便可创建链表,如图:
![](http://www.2cto.com/uploadfile/2012/0202/20120202124108274.jpg)
到此,便可创建一个链表了。
------------------------------------------------------------------
打印链表函数
------------------------------------------------------------------
前几天写了一个文章,叫怎么创建一个链表,如今说,链表的另一个操作,怎么打印出内容来。
废话不说,直接跟上以前的代码,写出打印函数来。
void print(struct student *head)
{
struct student *p;
printf(“\n these %d records are:\n”,n);
p = head;
if(head != NULL)
do
{
printf(“%ld %f\n”,p->num,p->score);
p = p->next;
}while(p != NULL);
}
很简单,效果跟上一篇一样,那个也是通过这个函数打印出来的,
作者 李木空间
用数组存放数据时,必须事先定义固定的长度(即元素个数),但是事先难以确定有多少个元素时,则必须把数组定义的足够大,以保证成功。
无疑,这会造成内存浪费,然而,链表则没有这种缺点,它可以根据需要,动态开辟内存单元。
链表中的各个元素在内存中是可以不是连续存放的,但是要找到某一元素,必须知道它的地址,这就需要链表必须有一个头指针(head)。
今天我就开始介绍一系列的链表操作,包括链表的创建,链表的输出,链表的删除,链表的插入等等。
通过学生学号和成绩来表现这一过程。
链表的创建:
#include “stdlib.h”
#include “stdio.h”
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
long num;
float score;
struct student *next;
};
int n;
struct student *creat(void)
{
struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN);
scanf(“%ld,%f”,&p1->num,&p1->score);
head=NULL;
while(p1->num != 0)
{
n=n+1;
if(n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = (struct student *)malloc(LEN);
scanf(“%ld,%f”,&p1->num,&p1->score);
}
p2->next = NULL;
return(head);
}
void main()
{
creat();
}
这样便可创建链表,如图:
![](http://www.2cto.com/uploadfile/2012/0202/20120202124108274.jpg)
到此,便可创建一个链表了。
------------------------------------------------------------------
打印链表函数
------------------------------------------------------------------
前几天写了一个文章,叫怎么创建一个链表,如今说,链表的另一个操作,怎么打印出内容来。
废话不说,直接跟上以前的代码,写出打印函数来。
void print(struct student *head)
{
struct student *p;
printf(“\n these %d records are:\n”,n);
p = head;
if(head != NULL)
do
{
printf(“%ld %f\n”,p->num,p->score);
p = p->next;
}while(p != NULL);
}
很简单,效果跟上一篇一样,那个也是通过这个函数打印出来的,
作者 李木空间
相关文章推荐
- C:链表的操作(一),如何创建一个链表
- 树的基本结构,以及利用链表实现树的各项操作(创建、添加/删除/打印树节点、销毁等等)
- CICS中关于map的操作,教你如何创建一个完整的map
- 日常联系:一个C++程序完成链表的增加结点、删除结点、打印、查询、逆序等操作
- 如何创建一个链表
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- SilverLight学习笔记--如何在xaml文件中操作用户在后台代码定义的类(2)--示例篇:创建一个登录控件(原创)(转载本文请注明出处)
- gdb-如何在gdb里自动打印一个链表的方法:写一小段执行嵌套脚本
- 关于Excel操作编写的一个软件设计构思案例[连载] --如何创建快捷菜单执行人机交互操作、软件初始化设置
- 给定一个单向链表,目前已经有一个指针,指向某一个节点(记作A),现在要删除这个节点A,如何操作。
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 带头节点链表的操作(链表的创建、删除、查找、逆转、打印等等)
- C语言各种链表操作(创建、打印、删除、插入、反转)
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- 算法研究之——链表的一些操作(创建、打印,在头部、中间、尾部插入节点)
- 如何创建一个链表
- 链表操作综合练习(创建、拆分、插入、删除、合并、打印、逆置)
- 如何创建一个链表(链栈:一)
- c++之链表篇1:单向链表的创建,打印,删除,插入,销毁等基本操作
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)