设有一个线性表E = { e1, e2, … , en - 1, en },设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E'={ en , en-1 , … , e2 , e1

2023-10-31

设有一个线性表E = { e1, e2, … , en - 1, en },设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en , en-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

将链表倒置就是把原本指向右的链表方向反过来,让这个链表指向方向变成左,这样就可以不用移动链表的内存位置,就实现了链表的倒置。

顺序表就很简单了,互换就行了。

在这里插入图片描述

这是链表的:

#include<stdio.h>
#include<stdio.h>
typedef struct node
{
	char data;
	struct node *next;
}* linklist;

linklist creat();
void print(linklist head);
void Reversal(linklist head);

#include <stdio.h>
#include <stdlib.h>
int main()
{
	linklist head=NULL;
	head=creat();

	printf("您输入的字符串是:");
	print(head);

	Reversal(head);

	puts("逆置后的字符串是:");
	print(head);

	return 0;
}

linklist creat()
{
	char ch;
	linklist pNew,pEnd=NULL ;
	linklist a = NULL;
	a = (linklist)malloc(sizeof(linklist));
	pEnd = a;
	puts("请输入字符串(输入“*”结束):");
	while ((ch = getchar()) != '*')
	{
		pNew = (linklist)malloc(sizeof(linklist));   //采用尾插法
		pNew->data = ch;
		pEnd->next = pNew;
		pEnd = pNew;
	}
	pEnd->next = NULL;
	return a;
}
void print(linklist head)
{
	head = head->next;
	while (head->next != NULL)
	{
		printf("%c ", head->data);
		head = head->next;
	}
	printf("%c\n", head->data);
}
//void Reversal(linklist head)
//{
//	linklist p, q, r;
//	p = head->next;
//	q = p->next;
//	while (q != NULL)
//	{
//		r = q->next;
//		q->next = p;
//		p = q;
//		q = r;
//	}
//	head->next->next = NULL;
//	head->next = p;
//}
//单链表逆置                      //两种都可以
void Reversal(linklist head)
{
	linklist p, q;

	p = head->next;
	head->next = NULL;

	while (p)
	{
		q = p;
		p = p->next;
		q->next = head->next;
		head->next = q;
	}
}

这是顺序表的:

#include "stdio.h"
#include "stdlib.h"

typedef struct student
{
	char *data;
	int m;
}*plink;

plink CreateLista(int x);
void printfplink(plink Lb);
plink Reversal(plink Lb);
int main() 
{
	plink La=NULL;
	int x;
	printf("请输入你字符串字符个数:");
	scanf_s("%d", &x);
	La=CreateLista(x);
	printfplink(La);
	La = Reversal(La);
	printfplink(La);
	return 0;
}

plink CreateLista(int x)
{
	char ch, i;
	plink L;
	L = (plink)malloc(sizeof(plink));
	L->m = x;
	L->data = (char *)malloc((x * sizeof(char)));
	printf("请输入一字符串(输入%d个结束):\n",x);
	getchar();                                    //清除上次回车键
	for (i = 0; i < x; i++) {
		ch = getchar();
		L->data[i] = ch;
	}
	return L;
}
void printfplink(plink Lb)
{
	for (int i = 0; i < Lb->m; i++)
		printf("%c ", Lb->data[i]);
	printf("\n");
}
plink Reversal(plink Lb)
{
	int x = Lb->m - 1;
	char t;
	for (int i = 0; i < (Lb->m)/2; i++,x--)
	{
		t = Lb->data[i];
		Lb->data[i]= Lb->data[x];
		Lb->data[x] = t;

	}
	return Lb;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设有一个线性表E = { e1, e2, … , en - 1, en },设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E'={ en , en-1 , … , e2 , e1 的相关文章

随机推荐

  • uniapp使用svg图片的优化方案

    问题 uniapp使用svg图片 浏览器测试可以显示出来 真机测试无法显示 为了解决手机无法显示svg图标的问题 本人特意开发了一款插件 如有不足请各位指出 勿喷 svg icon DCloud 插件市场 替换方案 使用字体图标 1 打开下
  • Sublime Text 常用插件安装介绍,从入门到精通(图文系列二)

    不懂Sublime Text基础下载安装的请先看这篇 Sublime Text下载 安装和Package Control的安装方法 在安装Package Control之后我们就可以开启Sublitme Text插件的之路啦 下边在这简单的
  • 动手学CV-目标检测入门教程2:VOC数据集

    3 2 目标检测数据集VOC 本文来自开源组织 DataWhale CV小组创作的目标检测入门教程 对应开源项目 动手学CV Pytorch 的第3章的内容 教程中涉及的代码也可以在项目中找到 后续会持续更新更多的优质内容 欢迎 如果使用我
  • 使用YOLOV5训练自己的数据集时所遇到问题

    训练过程中 1 attributeerror module yaml has no attribute load 方法1 如果另一个名为 yaml py 的文件在 PyYaml 库之前出现在你的 sys path 中 就会接收并导入该 ya
  • ubuntu安装docker

    sudo apt get remove docker docker engine docker io containerd runc sudo apt get update sudo apt get install apt transpor
  • 强化学习中累积奖赏公式的推导

    转载于 强化学习中累积奖赏公式的推导 qingtian11112的博客 CSDN博客 强化学习累计奖励 1 一些符号解释 P C D 表示条件概率 在D发生的条件下 C发生的概率 E C D 表示在D发生的条件下 求C的期望 即有 X 表示
  • 二叉树面试题

    将二叉查找树变为有序双向链表 考虑 二叉查找树的特点是左子树比根节点小 根节点又比右子树小 所以要把二叉查找树变为有序的双向链表 就要把左子树连接到它的前一个结点 右子树作为后一个结点 递归的进行下去 如图所示 问题解决 按照中序遍历二叉树
  • leetcode1798. 你能构造出连续值的最大数目(前缀和,贪心)

    题面 程序 class Solution public int getMaximumConsecutive vector
  • DM6446的视频前端VPFE的驱动大框架解析

    本文均属自己阅读源码的点滴总结 转账请注明出处谢谢 欢迎和大家交流 qq 1037701636 email 200803090209 zjut com gzzaigcn2012 gmail com dm6446是基于Davinci架构设计的
  • 什么是NFT?

    什么是NFT Not Fungible Token 非同质化代币 NFT是啥 内啡肽吗 很苦很苦的那个 术语说明 NFT Non Fungible Token 非同质化代币 FT Fungible Token 同质化代币 UTXO Unsp
  • python 模块 — logging模块、smtplib和email模块

    python 模块 日志 什么时候需要日志记录 排错 程序调试 用户行为分析 logging模块 日志等级 数值表示 描述 DEBUG 10 最详细的日志 常用于调试 INFO 20 仅次于debug的详细日志 记录关键节点 WARNING
  • std::string用法详解

    前言 string 的角色 1 string 使用 1 1 充分使用string 操作符 1 2 眼花缭乱的string find 函数 1 3 string insert replace erase 2 string 和 C风格字符串 3
  • centos8启动docker-mysql8容器

    README 本文记录了 centos8 安装 启动mysql8的docker容器的步骤 1 安装mysql8 docker容器 步骤1 查看mysql8 docker镜像版本 最简单的方式是上 Docker Hubhttps hub do
  • plsql因事务未提交造成的锁表的解决办法

    针对自己经常plsql锁表情况做个备忘录 方便下次操作 原文链接 https blog csdn net nmjuzi article details 80353670 1 执行以下语句可查询被锁的表 select b owner b ob
  • 敏捷测试团队管理的挑战与机会

    敏捷团队的管理其实的确面临着很多的挑战 蔡老师分别从敏捷管理的挑战 接受敏捷 敏捷下面的组织结构 敏捷架构下的沟通 敏捷下的KPI考核 以及机会和发展几个方面进行深入的讨论 其实我觉得各个公司施行敏捷的时候都会遇见这次讲师所分享的一些问题
  • Hive jdbc运行方式

    1 在服务器端启动hiveserver2 metastore服务所在的服务器 hive service hiveserver2 2 代码和访问mysql数据库的一样 package com bjsxt hive import java sq
  • [币严区块链]数字货币交易所之以太坊(ETH)钱包对接(一) 以太坊Geth客户端安装...

    以太坊Geth客户端安装 geth是以太坊的官方客户端 它是一个命令行工具 提供很多命令和选项 可以运行以太坊节点 创建和管理账户 发送交易 挖矿 部署智能合约等 下面介绍geth的三种安装方法 直接下载可执行文件 在线安装 从源码编译安装
  • 特征选择-包裹式选择

    包裹式选择与过滤式选择不考虑后续学习器不同 直接把最终使用的学习器的性能作为特征子集的评价准则 换言之 包裹式选择的目的就是为给定学习器选择最有利于其性能 量身定做 的特征子集 与过滤式选择的区别 包裹式选择方法直接针对给定学习器进行优化
  • OSI七层作用及常见协议

    OSI 模型 Open Systems Interconnection Model 由国际化标准组织ISO The International Organization for Standardization 收录在ISO 7489标准中并
  • 设有一个线性表E = { e1, e2, … , en - 1, en },设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E'={ en , en-1 , … , e2 , e1

    设有一个线性表E e1 e2 en 1 en 设计一个算法 将线性表逆置 即使元素排列次序颠倒过来 成为逆线性表E en en 1 e2 e1 要求逆线性表占用原线性表空间 并且用顺序表和单链表两种方法表示 分别用两个程序来完成 将链表倒置