Problem D: 链表的基本运算(线性表)
Problem D: 链表的基本运算(线性表)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 18 Solved: 10
Description
编写一个程序,实现链表的各种基本运算(假设顺序表的元素类型为char),主函数已给出,请补充每一种方法。
1、初始化单链表L;
2、采用尾插法依次插入元素a,b,c,d,e;
3、输出单链表L;
4、输出单链表L的长度;
5、判断单链表L是否为空;
6、输出单链表L的第三个元素;
7、输出元素a的位置;
8、在第四个元素位置插入元素f;
9、输出单链表L;
10、删除L的第三个元素;
11、输出单链表L;
12、释放单链表L;
数据元素类型定义为
typedef char ElemType;
顺序表的定义为
int main()
{
SqList *L;
InitList(L); //初始化单链表
ElemType a,b,c,d,e;
scanf("%c %c %c %c %c%*c",&a,&b,&c,&d,&e);
Insert(L,a);
Insert(L,b);
Insert(L,c);
Insert(L,d);
Insert(L,e); //使用尾插法插入元素a,b,c,d,e
Print(L); //输出单链表
PrintLength(L); //输出单链表长度
if(SqNull(L))
printf("单链表不为空\n");
else printf("单链表为空\n"); //判断单链表是否为空
PrintData(L,3); //输出第三个元素
printf("元素a的位置:%d\n",Find(L,a)); //输出元素a的位置
ElemType f;
scanf("%c",&f);
Insertinto(L,4,f); //将f插入到第四个位置
Print(L); //输出单链表
Delete(L,3); //删除第三个元素
Print(L); //输出单链表
free(L); //释放内存
return 0;
}
Input
第一行输入五个元素a,b,c,d,e;接下来输入元素f;请根据题目编写算法。
Output
Sample Input
1 2 3 4 5 6
Sample Output
1 2 3 4 5 5 单链表不为空 3 元素a的位置:1 1 2 3 6 4 5 1 2 6 4 5
HINT
请使用C++编译并提交
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node
{ElemType data;struct Node *next;
} SqList;
void InitList(SqList *&L)
{L=(SqList*)malloc(sizeof(SqList));L->next=NULL;
}
void Insert(SqList *&L,ElemType n)
{SqList *p=L,*q;while(p->next!=NULL)p=p->next;q=p;p=(SqList*)malloc(sizeof(SqList));q->next=p;p->data=n;p->next=NULL;
}
void Print(SqList *L)
{SqList *p=L->next;while(p->next!=NULL){printf("%c ",p->data);p=p->next;}printf("%c\n",p->data);
}
void PrintLength(SqList *L)
{int i=0;SqList *p=L->next;while(p!=NULL){i++;p=p->next;}printf("%d\n",i);
}
bool SqNull(SqList *L)
{SqList *p=L->next;if(L->next!=NULL)return true;else return false;
}
void PrintData(SqList *L,int n)
{SqList *p=L->next;int i;for(i=0; i<n-1&&p->next!=NULL; i++)p=p->next;printf("%c\n",p->data);
}
int Find(SqList *L,ElemType a)
{SqList *p=L->next;for(int i=0; p!=NULL; i++)if(p->data==a)return i+1;return 0;
}
void Insertinto(SqList *&L,int n,ElemType f)
{SqList *p=L->next,*q;for(int i=1; p!=NULL; i++){if(i==n-1){q=(SqList*)malloc(sizeof(SqList));q->data=f;q->next=p->next;p->next=q;}p=p->next;}
}
void Delete(SqList *&L,int n)
{SqList *p=L->next,*q;for(int i=1; p!=NULL; i++){if(i==n-1){q=p->next;p->next=p->next->next;free(q);}p=p->next;}
}
int main()
{SqList *L;InitList(L); //初始化单链表ElemType a,b,c,d,e;scanf("%c %c %c %c %c%*c",&a,&b,&c,&d,&e);Insert(L,a);Insert(L,b);Insert(L,c);Insert(L,d);Insert(L,e); //使用尾插法插入元素a,b,c,d,ePrint(L); //输出单链表PrintLength(L); //输出单链表长度if(SqNull(L))printf("单链表不为空\n");else printf("单链表为空\n"); //判断单链表是否为空PrintData(L,3); //输出第三个元素printf("元素a的位置:%d\n",Find(L,a)); //输出元素a的位置ElemType f;scanf("%c",&f);Insertinto(L,4,f); //将f插入到第四个位置Print(L); //输出单链表Delete(L,3); //删除第三个元素Print(L); //输出单链表free(L); //释放内存return 0;
}
Problem D: 链表的基本运算(线性表)相关推荐
- 单链表-两个线性表的合并(不破坏原链表+尾插法)
题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...
- 单链表-两个线性表的合并1(破环原链表+尾插法)
题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...
- 《数据结构》c语言版学习笔记——单链表结构(线性表的链式存储结构Part1)
线性表的链式存储结构 数据结构系列文章 第二章 单链表结构 文章目录 线性表的链式存储结构 前言 一.单链表的建立 代码 二.单链表的读取 代码 三.单链表的插入 代码 四.单链表的删除 代码 五.单 ...
- 2-1-单链表顺序存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版...
课本源码部分 第2章 线性表 - 单链表顺序存储结构 --<数据结构>-严蔚敏.吴伟民版 ★有疑问先阅读★ 源码使用说明 链接☛☛☛ <数据结构-C语言版>( ...
- 已知由单链表表示的线性表中含有三类字符(数字,字母和其他字符)试编写算法来构造三个循环链表,使每个表中只含某一类字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。
核心算法: void Classify(LinkList LA,LinkList LB,LinkList LC){//LA为原表,LB,LC为已经初始化的单链表头结点Node *pa,*pb,*pc; ...
- 已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。
先封装一个单链表LA,引用Creat()函数利用尾插法来生成链表,先输入n值来确定单链表中数据元素的个数,然后通过键盘输入元素,创建3个空链表来存放三种不同字符类型,通过Match()中的ASCII码 ...
- 链表 -- 双向循环链表(线性表)
1,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环 ...
- YTU OJ 2221: 两个链表之间问题(线性表)
题目描述 已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前. 输入 前三个数分别表示 ...
- python删除链表满足pred的元素_python 数据结构一 之 线性表
python数据结构教程第一课 从这里将会正式开始讲解python的一些实用的数据结构,原理加上实例源码. 一.简介 二.线性表的抽象数据类型 三.顺序表的实现 四.链接表的实现 1.单链表 2.带尾 ...
最新文章
- 计算机位运算:左移乘以2,右移除以2
- Bound Services
- 第一届WebRTCon在上海举行
- Eclipse工作常见问题总结
- 综述 | Google团队发布,一文概览Transformer模型的17大高效变种
- 线程工具类 - CountDownLatch(倒计时器)
- 《Android/OPhone开发完全讲义》连载(7):使用SharedPreferences存取复杂数据
- 使用JS实现将GridView中的TextBox列的值博给GridView外的一个文本筐
- python除了爬虫还可以干什么_python爬虫能够干什么
- 中考 计算机录取 步骤,中考录取时间及录取流程详解
- Java编程思想 经典评注分享
- js对象深拷贝与浅拷贝
- DMX512协议个人总结,待验证,欢迎拍砖
- java 随机抽取数组内容_工具类:随机抽取数组或集合中的几个不重复元素
- JLA服务器性能测试,Shell脚本 | 性能测试之CPU占有率
- 很多情侣看了以后,不在关机
- 【paddlepaddle安装报错系列】DLL lond failed:找不到指定模块
- SpringBoot项目端点配置
- C语言写的一个简单的计算器
- 浅谈Mysql数据库
热门文章
- java 封装api_关于java 封装某个功能为api形式供其他用户调用的问题
- linux ftp下载函数函数,FTP下载的函数
- linux setuid函数_setuid函数解析
- 【C语言基础】gdb调试工具的使用
- c语言 自动化编译环境,《C编程.开始C》3.编译基础
- java jdbc 操作_Java:JDBC操作
- php seaslog安装,浅谈win10下安装php seaslog扩展的方法
- 虚拟机python建站_搭建本地虚拟服务器linux(CentOS 7)的python虚拟环境(Hyper-V演示)...
- python位运算符_详细介绍Python语言中的按位运算符
- php中手机端ajax上拉加载更多,jQuery手机网页上拉加载更多