#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
char data;
Node *next;
} Node,*LinkList;

//初始化单链表
void InitList(LinkList *L)
{
*L=(LinkList)malloc(sizeof(Node));
(*L)->next=NULL;
}

//头插法建立单链表
void CreateFromHead(LinkList L)
{
Node *s;
char c;
int cp=1;
while(cp){
scanf("%c",&c);
if(c!='$')
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;

}
else cp=0;
}
}

//尾插法建立单链表
void CreateFromTail(LinkList L)
{
Node *s;
Node *r;
char c;
int cp=1;
r=L;
while(cp)
{
scanf("%c",&c);
if(c!='$')
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
r->next=s;
r=s;
}
else
{cp=0;r->next=NULL;}
}
}

//在单链表中查找第i个结点
Node* Get(LinkList L,int i)
{
int j;
j=0;
Node *p;
p=L;
if(i<=0)return NULL;
while((p->next!=NULL)&&j<i)
{
p=p->next;
j++;
}
if(i==j)return p;
else return NULL;
}

//按值查找
Node* Locate(LinkList L,char c)
{
Node *p;
p=L->next;
while(p!=NULL)
{
if(p->data!=c)
p=p->next;
else break;
}
if(p==NULL)printf("未查找到!");
return p;
}

//求单链表长度
int ListLength(LinkList L)
{
Node *p;
p=L->next;
int j=0;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}

//输出单链表中所有值
void Printff(LinkList L)
{
Node *p;
p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
}

//单链表插入操作
void InsList(LinkList L,int i,char c)
{
Node *pre,*s;
int k;
if(i<=0)printf("ERROR!");
pre=L;
k=0;
while(pre!=NULL&&k<i-1)
{
pre=pre->next;
k++;
}
if(!pre)
{
printf("插入位置不合理!");
}

s=(Node*)malloc(sizeof(Node));
s->data=c;
s->next=pre->next;
pre->next=s;
printf("插入成功!");
}

//单链表删除操作
void DelList(LinkList L,int i)
{
Node *pre,*r;
int k;
pre=L;
k=0;
char c;
while(pre->next!=NULL&&k<i-1)
{
pre=pre->next;
k++;
}
if(!(pre->next))
{
printf("删除位置不合理!\n");
}
r=pre->next;
pre->next=r->next;
c=r->data;
free(r);
printf("删除的值为:%c\n",c);
printf("删除成功!\n");
}

int main()
{
LinkList *L;
InitList(L);
//CreateFromHead(*L);
printf("请输入结点的值:\n");
CreateFromTail(*L);

int i;
printf("请输入你要查找的位置:\n");
scanf("%d",&i);
Node *p=Get(*L,i);
printf("第%d个结点值是:%c\n",i,*p);

char c;
char d=getchar();
printf("请输入你要查找的值:\n");
scanf("%c",&c);
Node *q=Locate(*L,c);
printf("搜索到%c\n",*q);
printf("长度为:%d\n",ListLength(*L));

printf("请输入你要插入的位置和值:\n");
int h;char hh;
scanf("%d %c",&h,&hh);
InsList(*L,h,hh);

printf("插入后链表为:\n");
Printff(*L);
printf("\n");

printf("请输入你要删除的位置:\n");
int hhh;
scanf("%d",&hhh);
DelList(*L,hhh);

printf("删除后链表为:\n");
Printff(*L);
printf("\n");
return 0;
}

转载于:https://www.cnblogs.com/a842297171/p/4431897.html

数据结构学习(1):单链表相关推荐

  1. 数据结构学习之单链表

    节点类 #ifndef Node_H #define Node_H template <class Type> class Node //单链节点类 { public: Type data ...

  2. 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表

    http://blog.csdn.net/abclixu123/article/details/8210109 链表也是线性表的一种,与顺序表不同的是,它在内存中不是连续存放的.在C语言中,链表是通过 ...

  3. 数据结构学习心得——单链表

    一.线性表的存储结构 顺序表(顺序表操作见上一篇博客) 链表 在链表存储中,每个结点不仅包含所有的元素的信息,还包含元素之间逻辑关系的信息,如单链表中前驱结点包含后继结点的地址信息,这样就可以通过前驱 ...

  4. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  5. python数据结构基础(单链表,多链表,二叉树)

    python数据结构基础(单链表,多链表,二叉树) 数据结构指数据对象中数据元素之间的关系 Python 给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做 ...

  6. 数据结构之——《单链表》

    数据结构之--<单链表> 1.链表概念 2.链表分类 3.接口函数实现 1.链表概念 链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现. ...

  7. 数据结构精讲——单链表

    新手必会数据结构精讲--单链表 链表的介绍 概念:链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 . 实际中链表的结构非常多样,以下情况组合起来就 ...

  8. 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)

    线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...

  9. 03-java数据结构之链表的学习(单链表、双链表等)

    文章目录 1.链表 1.1 链表的介绍 2.单链表 2.1.单链表的显示 2.2.单链表的添加操作 2.2.1.直接添加到链表的尾部 2.2.2.根据no插入到指定位置 2.3.单链表节点的修改 2. ...

  10. 头歌平台数据结构与算法 单链表实验 第1关:倒置链表

    任务描述 相关知识 实验目的 实验任务 实验说明 编程要求 测试说明 任务描述 本关任务:请在右侧编辑器的注释行填入适当内容来完成算法,以实现指定的功能,并通过运行来验证. 相关知识 实验目的 理解线 ...

最新文章

  1. OpenStack基金会的白金和黄金成员公司
  2. Idea根据表自动生成实体
  3. 【复杂网络】用户画像不应脱离社会关系,谈复杂网络的关键技术和应用实践
  4. Go mod 七宗罪
  5. 计算机组成原理基于mips结构pdf,计算机组成原理_L12-MIPS系统结构-V1.pdf
  6. sql 通过游标 拆分xml结构
  7. 如何关闭迅雷频繁自动弹出更新到新版本的提示
  8. 排序算法-归并排序详细讲解(MergeSort)
  9. 虚拟机打开了服务器维护,Vmware WorkStation 打开远程服务器上的虚拟机
  10. 微信小程序转发功能详解
  11. ipa文件安装到ios系统
  12. 记一段随风而逝的感情
  13. 转载 | 上汽集团云计算中心的开源之路
  14. Git 推送命令报错
  15. 25岁,一个北漂程序员,如果不想35 岁被淘汰,请把它当成一种信仰!
  16. MySQL的三层架构(连接认证、解析优化和存储引擎)
  17. Win11彻底卸载WSL2系统(去除导航窗格Linux图标)
  18. 关于 Shell 脚本的经典十三问
  19. 六十四、Kylin的初体验
  20. 老司机带你玩转SDL(一)

热门文章

  1. typeof需要注意的内容
  2. Linux系统下Apache的安装、启动等初级操作
  3. ubuntu文字界面与图形界面切换
  4. JAVA 正则表达式 (超详细) .
  5. 在macOS Sierra 10.12.3下用VMware Fusion安装Ubuntu 16.04.2
  6. 大数据开发笔记(四):Hive数仓调优
  7. 大数据技术的特点有哪些
  8. 大数据分析推动业务增长的方法有哪些
  9. 大数据系统如何提供抗击疫情信息
  10. 基于深度学习的数字识别GUI的设计