【数据结构——线性表】单链表的基本运算(头歌实践教学平台习题)【合集】

目录😋

任务描述

相关知识

测试说明

我的通关代码:

测试结果:


任务描述

本关任务:编写一个程序实现单链表的基本运算。

相关知识

为了完成本关任务,你需要掌握:初始化线性表、销毁线性表、判定是否为空表、求线性表的长度、输出线性表、求线性表中某个数据元素值、按元素值查找、插入数据元素、删除数据元素等。

测试说明

平台会对你编写的代码进行测试:
测试输入:

3

4
预期输出:

(1)初始化单链表h

(2)依次采用尾插法插入a,b,c,d,e元素

(3)输出单链表h:a b c d e

(4)单链表h长度:5

(5)单链表h为非空

(6)单链表h的第3个元素:c

(7)元素a的位置:1

(8)在第4个元素位置上插入f元素

(9)输出单链表h:a b c f d e

(10)删除h的第3个元素

(11)输出单链表h:a b f d e

(12)释放单链表h

开始你的任务吧,祝你成功!


我的通关代码:

cpp 复制代码
#include <iostream>#include <string>
using namespace std;
#define MAX_SIZE 100

typedef char ElemType;

typedef struct {
  ElemType data[MAX_SIZE];
  int length;
} SeqList;

void InitList(SeqList &L) { L.length = 0; }

void PrintList(SeqList L) {
  for (int i = 0; i < L.length; i++) {
    cout << L.data[i] << " ";
  }
  cout << endl;
}
int InsertList(SeqList *L, int i, ElemType e) {
  if (i < 1 || i > L->length + 1 || L->length >= MAX_SIZE)
    return 0;
  for (int j = L->length; j >= i; j--) {
    L->data[j] = L->data[j - 1];
  }
  L->data[i - 1] = e;
  L->length++;
  return 1;
}

bool GetElem(SeqList L, int i, ElemType &e) {
  if (i < 1 || i > L.length)
    return false;
  e = L.data[i - 1];
  return true;
}

int LocateElem(SeqList L, ElemType e) {
  for (int i = 0; i < L.length; i++) {
    if (L.data[i] == e)
      return i + 1;
  }
  return 0;
}

bool ListInsert(SeqList &L, int i, ElemType e) {
  if (i < 1 || i > L.length + 1)
    return false;
  for (int j = L.length; j >= i; j--) {
    L.data[j] = L.data[j - 1];
  }
  L.data[i - 1] = e;
  L.length++;
  return true;
}

bool ListDelete(SeqList &L, int i, ElemType &e) {
  if (i < 1 || i > L.length)
    return false;
  e = L.data[i - 1];
  for (int j = i; j < L.length; j++) {
    L.data[j - 1] = L.data[j];
  }
  L.length--;
  return true;
}

int main() {
  SeqList L;
  InitList(L);
  int pos1, pos2;
  cin >> pos1 >> pos2;
  cout << "(1)初始化单链表h" << endl;

  char elements[] = {'a', 'b', 'c', 'd', 'e'};
  for (int i = 0; i < 5; i++) {
    InsertList(&L, i + 1, elements[i]);
  }
  cout << "(2)依次采用尾插法插入a,b,c,d,e元素" << endl;
  cout << "(3)输出单链表h:";
  PrintList(L);

  cout << "(4)单链表h长度:" << L.length << endl;
  cout << "(5)单链表h为非空" << endl;

  ElemType e;
  if (GetElem(L, pos1, e)) {
    cout << "(6)单链表h的第" << pos1 << "个元素:" << e << endl;
  }
  int pos = LocateElem(L, 'a');
  cout << "(7)元素a的位置:" << pos << endl;

  ListInsert(L, pos2, 'f');
  cout << "(8)在第" << pos2 << "个元素位置上插入f元素" << endl;
  cout << "(9)输出单链表h:";
  PrintList(L);

  ListDelete(L, pos1, e);
  cout << "(10)删除h的第" << pos1 << "个元素" << endl;
  cout << "(11)输出单链表h:";
  PrintList(L);

  cout << "(12)释放单链表h";

  return 0;
}

测试结果:

相关推荐
炘爚5 小时前
phase1:基础框架——编译 + MySQL + 登录/注册
linux·c++
水木流年追梦5 小时前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt
特种加菲猫5 小时前
C++11核心特性深度解析:从列表初始化到lambda与包装器
开发语言·c++
数据皮皮侠5 小时前
全国消协智慧 315 平台投诉信息数据库
大数据·人工智能·算法·百度·制造
8Qi86 小时前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
枕星而眠6 小时前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
小蒋学算法6 小时前
算法-乘法表中第K小的数-二分
数据结构·算法
智者知已应修善业6 小时前
【51单片机8个LED,已经使用了D1D2,怎么样在不动D1D2的前提下实现D6~D8的流水灯】2024-1-19
c++·经验分享·笔记·算法·51单片机
Evand J6 小时前
【MATLAB例程】自适应渐消扩展卡尔曼滤波(AFEKF)三维雷达目标跟踪|效果已调优,附下载链接和运行结果,代码直接运行即可
开发语言·算法·matlab·目标跟踪·卡尔曼滤波·自适应滤波·代码定制
坚果派·白晓明6 小时前
鸿蒙PC适配实战:simdjson 三方库移植攻略与 AtomCode Skills 提效之道
c++·harmonyos·三方库·skills·atomcode·c/c++三方库·c/c++三方库适配