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;

顺序表的定义为

typedef struct Node
{
ElemType data;
struct Node *next;
} SqList;

主函数:

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: 链表的基本运算(线性表)相关推荐

  1. 单链表-两个线性表的合并(不破坏原链表+尾插法)

    题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...

  2. 单链表-两个线性表的合并1(破环原链表+尾插法)

    题意: 令L1 = (X1,X2,X3,X4-Xn), L2 = (y1,y2,y3,y4-ym);是两个线性表.采用带头节点的链表存储,设计一个算法合并L1,L2,结果放在线性表L3中,要求如下: ...

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

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

  4. 2-1-单链表顺序存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版...

    课本源码部分 第2章  线性表 - 单链表顺序存储结构 --<数据结构>-严蔚敏.吴伟民版        ★有疑问先阅读★ 源码使用说明  链接☛☛☛ <数据结构-C语言版>( ...

  5. 已知由单链表表示的线性表中含有三类字符(数字,字母和其他字符)试编写算法来构造三个循环链表,使每个表中只含某一类字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间。

    核心算法: void Classify(LinkList LA,LinkList LB,LinkList LC){//LA为原表,LB,LC为已经初始化的单链表头结点Node *pa,*pb,*pc; ...

  6. 已知由一个线性链表表示的线性表中含有 3 类字符的数据元素(如:字母,数字和其他字符),试编写算法将该线性链表分割为 3 个循环链表,其中每个循环链表均只含有一类字符。

    先封装一个单链表LA,引用Creat()函数利用尾插法来生成链表,先输入n值来确定单链表中数据元素的个数,然后通过键盘输入元素,创建3个空链表来存放三种不同字符类型,通过Match()中的ASCII码 ...

  7. 链表 -- 双向循环链表(线性表)

    1,双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点.一般我们都构造双向循环 ...

  8. YTU OJ 2221: 两个链表之间问题(线性表)

    题目描述 已知两个单链表A和B,其头指针分别为heada和headb,编写一个过程从单链表A中删除自第i个元素起的共len个元素,然后将单链表A插入到单链表B的第j个元素之前. 输入 前三个数分别表示 ...

  9. python删除链表满足pred的元素_python 数据结构一 之 线性表

    python数据结构教程第一课 从这里将会正式开始讲解python的一些实用的数据结构,原理加上实例源码. 一.简介 二.线性表的抽象数据类型 三.顺序表的实现 四.链接表的实现 1.单链表 2.带尾 ...

最新文章

  1. 计算机位运算:左移乘以2,右移除以2
  2. Bound Services
  3. 第一届WebRTCon在上海举行
  4. Eclipse工作常见问题总结
  5. 综述 | Google团队发布,一文概览Transformer模型的17大高效变种
  6. 线程工具类 - CountDownLatch(倒计时器)
  7. 《Android/OPhone开发完全讲义》连载(7):使用SharedPreferences存取复杂数据
  8. 使用JS实现将GridView中的TextBox列的值博给GridView外的一个文本筐
  9. python除了爬虫还可以干什么_python爬虫能够干什么
  10. 中考 计算机录取 步骤,中考录取时间及录取流程详解
  11. Java编程思想 经典评注分享
  12. js对象深拷贝与浅拷贝
  13. DMX512协议个人总结,待验证,欢迎拍砖
  14. java 随机抽取数组内容_工具类:随机抽取数组或集合中的几个不重复元素
  15. JLA服务器性能测试,Shell脚本 | 性能测试之CPU占有率
  16. 很多情侣看了以后,不在关机
  17. 【paddlepaddle安装报错系列】DLL lond failed:找不到指定模块
  18. SpringBoot项目端点配置
  19. C语言写的一个简单的计算器
  20. 浅谈Mysql数据库

热门文章

  1. java 封装api_关于java 封装某个功能为api形式供其他用户调用的问题
  2. linux ftp下载函数函数,FTP下载的函数
  3. linux setuid函数_setuid函数解析
  4. 【C语言基础】gdb调试工具的使用
  5. c语言 自动化编译环境,《C编程.开始C》3.编译基础
  6. java jdbc 操作_Java:JDBC操作
  7. php seaslog安装,浅谈win10下安装php seaslog扩展的方法
  8. 虚拟机python建站_搭建本地虚拟服务器linux(CentOS 7)的python虚拟环境(Hyper-V演示)...
  9. python位运算符_详细介绍Python语言中的按位运算符
  10. php中手机端ajax上拉加载更多,jQuery手机网页上拉加载更多