单链表是线性表链式储存的一种形式,其中的结点一般含有两个域,一个是存放数据信息的info域,另一个是指向该结点后继结点存放地址的指针next域。一个单链表必须要有一个首指针指向链表中的第一个结点。

单链表要掌握以下几种操作:

1、建立一个空的单链表。

2、输出单链表中个结点的值。

3、在单链表中查找第i个结点。

4、在单链表的第i个结点后插入一个值为x的新结点。

5、在单链表中删除一个值为x的结点。

以下是头文件

#ifndef HEAD_LINK_H_INCLUDED
#define HEAD_LINK_H_INCLUDED#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct link_node
{datatype info;struct link_node *next;
}N;//创建一个空链表
N *init()
{return NULL;
}//创建一个单链表
N *creat(int len)
{int a,i;N *p,*head,*q;if (len<1){return NULL;}else{for(i=1;i<=len;i++){scanf("%d",&a);p=(N*)malloc(sizeof(N));p->info=a;if(i==1){p->next=NULL;head=p;q=p;}else{q->next=p;q=p;p->next=NULL;}}return head;}
}//输出单链表中各节点的值
void display (N *head)
{N *p=head;if(!p){printf("\n该链表是空的!\n");}else{printf("\n单链表各节点的值为:\n");while(p){printf("%d",p->info);if(p->next){printf(" -> ");}p=p->next;}printf("\n");}
}//在单链表中查找第i个节点的值
N *find(N *head ,int i)
{int j=1;N *p=head;if(i<1){return NULL;}while(p && i!=j){p=p->next;j++;}return p;
}//在单链表中找出值为i的位置
int node_position(N* head,int i)
{N *p;int j=1;p=head;while(p && p->info!=i){p=p->next;j++;}if(!p){return 0;}else{return j;}
} //计算单链表的节点数目
int counts(N *head)
{N *p;int count=0;p=head;while(p){count++;p=p->next;}return count;
}//在单链表第i个结点后插入一个值为x的新新结点
N *insert(N *head,datatype x,int i)
{N *p,*q;q=find(head,i);/*找到第i个结点*/if(!q && i!=0){printf("找不到第%d个节点,不能插入%d",i,x);}else{p=(N*)malloc(sizeof(N));p->info=x;if(i==0){p->next=head;head=p;}else{p->next=q->next;q->next=p;}}return head;
}//从单链表中删除一个值为x的节点
N *dele_num(N *head,datatype x)
{N *pre=NULL,*p;if(!head){printf("该单链表是空的!");return head;}p=head;while(p && p->info!=x)/*没有找到并且没有找完*/{pre=p;p=p->next;/*pre指向p的前驱结点*/}if(p){if(!pre)/*要删除第一个结点*/{head=head->next;}else{pre->next=p->next;free(p);}}return head;
}//删除第i个结点
N *dele_node(N *head,int i)
{N *q,*p;if(!head){printf("该单链表是空的!");return head;}if(i==1){head=head->next;}else{q=find(head,i-1);p=find(head,i);q->next=p->next;      }return head;
}void menu()
{printf("\t|===================================|\t\n");printf("\t|                                   |\t\n");printf("\t|          单链表的相关操作         |\t\n");printf("\t|                                   |\t\n");printf("\t|===================================|\t\n");printf("\t|有如下选项:                        |\t\n");printf("\t|===================================|\t\n");printf("\t|【1】初始化一个链表                |\t\n");printf("\t|【2】输出单链表中各结点的值        |\t\n");printf("\t|【3】在单链表中查找第i个结点       |\t\n");printf("\t|【4】在单链表中找值为i的结点的位置 |\t\n");printf("\t|【5】在第i个结点后插入值为x的新结点|\t\n");printf("\t|【6】删除值为x的结点               |\t\n");printf("\t|【7】删除第i个结点                 |\t\n");printf("\t|===================================|\t\n");printf("\t|Ctrl+C结束该程序!!!             |\t\n");printf("\t|===================================|\t\n");
}#endif // HEAD_LINK_H_INCLUDED

下面是主程序:

#include "stdio.h"
#include "stdlib.h"
#include "head_link.h"int main ()
{N *p,*q,*h1;int a,len,count,node_number,x,position;while(1){menu();printf("请选择数字:");scanf("%d",&a);switch(a){case 1:{printf("\n请输入初始列表的长度:");scanf("%d",&len);h1=creat(len);break;}case 2:{display(h1);printf("\n现在一共有%d个节点\n",counts(h1));break;}case 3:{printf("输入某个节点:");scanf("%d",&node_number);if(!(find(h1,node_number))){printf("找不到该结点!\n");}else{printf("%d\n",(find(h1,node_number))->info);}break;}case 4:{  scanf("%d",&x);if(node_position(h1,x)){printf("%d\n",node_position(h1,x));}else{printf("该链表中找不到该值!\n");}break;}case 5:{printf("\n请输入要插入的数:");scanf("%d",&x);printf("请输入要插入的位置:");scanf("%d",&position);h1=insert(h1,x,position);display(h1);break;}case 6:{printf("请输入要删除的值:");scanf("%d",&x);h1=dele_num(h1,x);display(h1);break;}case 7:{printf("当前有%d个结点,请输入要删除的结点:",counts(h1));scanf("%d",&node_number);h1=dele_node(h1,node_number);display(h1);break;}}}return 0;
}

【数据结构】单链表的实现(C语言)相关推荐

  1. 数据结构-单链表基本操作(C语言实现)

    参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉)​​ 单链表定义 单链表是线性表的链式存储,通过一组任意的存储单元来存 ...

  2. 用c语言描述单链表的数据类型,数据结构—单链表(类C语言描述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List).     链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不 ...

  3. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List).     链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不 ...

  4. 数据结构—单链表(类C语言描述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的具体存储表示为: ① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的) ...

  5. C语言数据结构单链表链表

    数据结构–单链表 学习了顺序表,我们发现顺序表在向里面存放数据的时候很麻烦,比如我们要使用头插法存放一个数据到顺序表的时候,我们要将整个表都向后挪一位,这个操作就让人很难受.那么有没有一种结构可以让我 ...

  6. php链表和联表的区别,PHP_浅谈PHP链表数据结构(单链表),链表:是一个有序的列表,但 - phpStudy...

    浅谈PHP链表数据结构(单链表) 链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个 ...

  7. 20175330 数据结构-单链表(选做)

    要求 参见附件,补充MyList.java的内容,提交运行结果截图(全屏) 课下推送代码到码云 ``` public class MyList {     public static void mai ...

  8. 数据结构——单链表的C++实现

    数据结构--单链表的C++实现 \qquad单链表的创建.求长度.查找.插入和删除的C++实现. #include<iostream> using namespace std;//1.定义 ...

  9. php mysql 链表_浅谈PHP链表数据结构(单链表)

    链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区, ...

  10. python 单链表是否有回路_(Python3)数据结构--单链表之判断链表是否有环

    前言 有Python基础 有数据结构单链表基础,没接触过的可以看下面链接 https://blog.csdn.net/sf9898/article/details/104946291 原理和实现 有一 ...

最新文章

  1. CC讲坛-大脑疾病背后的秘密-许执恒
  2. erhai系统使用_web
  3. 《UML用户指南第二版》再次温读笔记(一)(downmoon)
  4. 如何安装pylab:python如何导入matplotlib模块
  5. light task schedule的定时任务实现源码解析
  6. 点赞!刘强东:无论京东员工遭遇何种不幸,将负责其子女费用到22岁
  7. mysql6默认什么字符集_mysql默认字符集问题
  8. [设计模式-行为型]备忘录模式(Memento)
  9. Open3d之RGBD测程法
  10. Java基础知识框图总结
  11. python实验报告内容实现购物车系统_Python实现的购物车功能示例
  12. Yahoo!用户体验与设计前副总裁推荐——《设计模式》
  13. Dropbox的服务器和网络自动化运维实践
  14. ABBYY FineReader PDF for Mac(PDF转换工具)
  15. for能否作为matlab的变量名,matlab中for语句用法
  16. thinkpadt410接口介绍_独家:ThinkPad T410与T400之细节对比
  17. python自动登录路由器_Openwrt路由器使用Python自动登录北航校园网
  18. XSY contest1586 proB
  19. html项目的致谢词,毕业论文致谢词范文200字(精选10篇)
  20. 顺丰--Java丰桥接口整体封装(下单、查询、打印)

热门文章

  1. Python培训常识:Python面试中常被问到的几种设计模式要知道
  2. 最新Java培训-NIO实战教程
  3. java web 怎么用solr_使用web过滤器增加solr后台登录验证
  4. java 多维数组转化为字符串
  5. EOS与以太坊有哪些区别? 1
  6. Android Go初探
  7. Oracle的分页查询
  8. 【解决】MySql 5.6 运行崩溃错误
  9. CCNA基础 IP地址子网划分
  10. css的background