链表的c语言实现(二)

原创 2005年04月30日 03:11:00

单链表的c语言实现(1)

一、单链表的建立
有了动态内存分配的基础,要实现链表就不难了。
所谓链表,就是用一组任意的存储单元存储线性表元素的一种数据结构。
链表又分为单链表、双向链表和循环链表等。我们先讲讲单链表。
所谓单链表,是指数据接点是单向排列的。一个单链表结点,其结构类型分为两部分:
1、数据域:用来存储本身数据
2、链域或称为指针域:用来存储下一个结点地址或者说指向其直接后继的指针。
例:
typedef struct node
{
char name[20];
struct node *link;
}stud;
这样就定义了一个单链表的结构,其中char name[20]是一个用来存储姓名的字符型数组,指针*link是一个用来存储其直接后继的指针。
定义好了链表的结构之后,只要在程序运行的时候爱数据域中存储适当的数据,如有后继结点,则把链域指向其直接后继,若没有,则置为NULL。
下面就来看一个建立带表头(若未说明,以下所指链表均带表头)的单链表的完整程序。
#include <stdio.h>
#include <malloc.h> /*包含动态内存分配函数的头文件*/
#define N 10 /*N为人数*/
typedef struct node
{
char name[20];
struct node *link;
}stud;

stud * creat(int n) /*建立单链表的函数,形参n为人数*/
{
stud *p,*h,*s; /* *h保存表头结点的指针,*p指向当前结点的前一个结点,*s指向当前结点*/
int i; /*计数器*/
if((h=(stud *)malloc(sizeof(stud)))==NULL) /*分配空间并检测*/
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='/0'; /*把表头结点的数据域置空*/
h->link=NULL; /*把表头结点的链域置空*/
p=h; /*p指向表头结点*/
for(i=0;i<n;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL) /*分配新存储空间并检测*/
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s; /*把s的地址赋给p所指向的结点的链域,这样就把p和s所指向的结点连接起来了*/
printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name); /*在当前结点s的数据域中存储姓名*/
s->link=NULL;
p=s;
}
return(h);
}

main()
{
int number; /*保存人数的变量*/
stud *head; /*head是保存单链表的表头结点地址的指针*/
number=N;
head=creat(number); /*把所新建的单链表表头地址赋给head*/
}

这样就写好了一个可以建立包含N个人姓名的单链表了。
写动态内存分配的程序应注意,请尽量对分配是否成功进行检测。

数据结构(二)——链表(C语言实现)

链表的使用
  • flueky
  • flueky
  • 2016年09月30日 22:08
  • 426

C语言来实现链表的相加基本操作 桂林电子科技大学 大二实验

C语言实现链表的基本操作 基本描述:用c语言来实现链表的基本操作,包括插入,删除,排列,两个链表的相加减 代码: 里面都有详细的解析了 #include #include #include #i...

数据结构(严蔚敏)之二——链表的c语言实现

介绍: 1、构造一个长为n的线性表,插入元素为逆序插入 2、构造一个长为n的线性表,插入元素为顺序插入 3、销毁链表L 4、查找L的第i个元素,并用e返回 5、查找L中第一个与e满足co...

(C语言)单链表的链式实现(数据结构二)

1.数据类型定义 在代码中为了清楚的表示一些错误和函数运行状态,我们预先定义一些变量来表示这些状态。在head.h头文件中有如下定义: //定义数据结构中要用到的一些变量和类型 #ifndef HE...

重温数据结构之链表二——C语言实现

链表链表属于线性表的一种,不同于顺序表数据的内存地址是连续的,我们就在该数据结构上加一个属性,指向前后数据的内存地址,这样就将数据一串一串的连起来了,这就是链表!链表分类链表是有一系列的内存地址不连续...

单链表的基本操作大全之C语言实现(二)

单链表的基本操作大全之C语言实现(二)补充一些链表的操作,之前的基本操作点击下面的链接。 单链表的基本操作大全之C语言实现(一)1. 递归打印链表void show_linklist(PNODE *...
  • men_wen
  • men_wen
  • 2016年12月04日 22:22
  • 268

C语言:单链表实现(二) 就地逆置,就地归并

#include #include #include #define LEN sizeof(struct Nodelist) using namespace std; typedef struct N...

单向链表的C语言实现

  • 2017年11月07日 20:32
  • 14KB
  • 下载

c语言实现链表

  • 2016年11月11日 22:50
  • 3KB
  • 下载

约瑟夫环的C语言链表实现

约瑟夫环的C语言链表实现约瑟夫环在生活中一般为游戏使用代码块linklist.cpp:// linklist.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #i...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表的c语言实现(二)
举报原因:
原因补充:

(最多只允许输入30个字)