链表的c语言实现(三)

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

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

二、单链表的基本运算
建立了一个单链表之后,如果要进行一些如插入、删除等操作该怎么办?所以还须掌握一些单链表的基本算法,来实现这些操作。单链表的基本运算包括:查找、插入和删除。下面我们就一一介绍这三种基本运算的算法,并结合我们建立单链表的例子写出相应的程序。
1、查找
对单链表进行查找的思路为:对单链表的结点依次扫描,检测其数据域是否是我们所要查好的值,若是返回该结点的指针,否则返回NULL。
因为在单链表的链域中包含了后继结点的存储地址,所以当我们实现的时候,只要知道该单链表的头指针,即可依次对每个结点的数据域进行检测。
以下是应用查找算法的一个例子:
#include <stdio.h>
#include <malloc.h>
#include <string.h> /*包含一些字符串处理函数的头文件*/
#define N 10

typedef struct node
{
char name[20];
struct node *link;
}stud;

stud * creat(int n) /*建立链表的函数*/
{
stud *p,*h,*s;
int i;
if((h=(stud *)malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
h->name[0]='/0';
h->link=NULL;
p=h;
for(i=0;i<n;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf("不能分配内存空间!");
exit(0);
}
p->link=s;
printf("请输入第%d个人的姓名",i+1);
scanf("%s",s->name);
s->link=NULL;
p=s;
}
return(h);
}

stud * search(stud *h,char *x) /*查找链表的函数,其中h指针是链表的表头指针,x指针是要查找的人的姓名*/
{
stud *p; /*当前指针,指向要与所查找的姓名比较的结点*/
char *y; /*保存结点数据域内姓名的指针*/
p=h->link;
while(p!=NULL)
{
y=p->name;
if(strcmp(y,x)==0) /*把数据域里的姓名与所要查找的姓名比较,若相同则返回0,即条件成立*/
return(p); /*返回与所要查找结点的地址*/
else p=p->link;
}
if(p==NULL)
printf("没有查找到该数据!");
}

main()
{
int number;
char fullname[20];
stud *head,*searchpoint; /*head是表头指针,searchpoint是保存符合条件的结点地址的指针*/
number=N;
head=creat(number);
printf("请输入你要查找的人的姓名:");
scanf("%s",fullname);
searchpoint=search(head,fullname); /*调用查找函数,并把结果赋给searchpoint指针*/

数据结构之---C语言实现二叉树的三叉链表存储表示

数据结构之---C语言实现二叉树的三叉链表存储表示
  • u012965373
  • u012965373
  • 2015年06月16日 09:47
  • 1278

C语言单向链表的实现

一个简单结点的结构体表示为:    struct note    {       int  data;              /*数据成员可以是多个不同类型的数据*/       struct  ...
  • 21aspnet
  • 21aspnet
  • 2004年10月30日 16:30
  • 24094

c语言实现链表及其基本操作

链表:        链表是一种物理储存单元上非连续、非顺序的储存结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。...
  • MBuger
  • MBuger
  • 2016年09月13日 18:18
  • 8608

学习心得:链表的操作(C语言实现)

今天将给大家讲述链表的学习心得。学习数据结构,毋庸置疑链表必须学好,后面的栈、队列、树、图都是以链表为基础的;链表的种类很多,有单链表、双链表、循环链表、非循环链表;在此,我们以非循环单链表为例,来讲...
  • lpp0900320123
  • lpp0900320123
  • 2014年03月03日 18:55
  • 58379

链表的简单实现(C语言版)

链表是一种简单的数据结构,其插入和删除的效率比较高链表定义(头文件):#ifndef NODE_H_INCLUDED #define NODE_H_INCLUDEDstruct Node; typed...
  • xiaodu1997
  • xiaodu1997
  • 2016年10月06日 23:29
  • 631

C语言 实现 链表栈

LinkStack.h 头文件声明如下: #include typedef int DataType; //自定义数据类型,假定为整型 struct Node; ...
  • lutinghuan
  • lutinghuan
  • 2012年04月18日 20:12
  • 11249

C语言实现栈(基于链表)

栈的底层数据结构可以是数组,也可以是链表,用链表实现栈,理论上是无限大的 下面是链栈的实现代码 #include #include typedef int datatype; //Link St...
  • weixin_36040034
  • weixin_36040034
  • 2016年11月26日 23:00
  • 2038

c语言-指针实现链表增删改查

通过指针实现链表增删改查。 1.首先定义宏以及结构体作为数据结构使用。 #define LEN sizeof(struct student) struct student{ long num...
  • u012569119
  • u012569119
  • 2015年08月28日 23:48
  • 2095

C语言实现贪吃蛇(三)----结构+链表实现

前言:本博客所讲到的知识跟前面我的两篇博客:《C语言实现贪吃蛇(一)—-数组实现》、《C语言实现贪吃蛇(二)—-局部刷新》 有很大的关系,建议大家前往看一下,尤其是第一篇,那篇博客是所有关于贪吃蛇游戏...
  • baidu_30000217
  • baidu_30000217
  • 2016年11月17日 22:42
  • 2425

单向链表的C语言实现与基本操作

本文的主要内容目录: 一、单向链表的C语言实现 二、单向链表的基本操作 一、单向链表的C语言实现 链表作为一种基本的数据结构在程序开发过程当中经常会使用到。对C语言来说链表的实现主要依靠结构体和指...
  • TECH_PRO
  • TECH_PRO
  • 2017年04月17日 05:59
  • 3067
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:链表的c语言实现(三)
举报原因:
原因补充:

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