线性结构逆序

  1. 顺序表

/// <summary>

/// 逆序输出

/// </summary>

public void Reverse()

{

if (length <= 1)

{

return;

}

for (int i = 0; i < length/ 2; i++)

{

T tmp=dataset[i];

dataset[i] = dataset[length - i - 1];

dataset[length - i - 1] = tmp;

}

}

2.单链表

/// <summary>

/// 逆序

/// </summary>

public void Reverse()

{

if (length <= 1)

{

return;

}

SNode<T> tmp = pHead;

SNode<T> t1 = tmp.Next;

SNode<T> t2 = t1.Next;

pHead.Next = null;

for (int i = 1; i < length-1; i++)

{

t1.Next = tmp;

tmp = t1;

t1 = t2;

t2 = t2.Next;

}

t1.Next = tmp;

pHead = t1;

}

3.循环链表

/// <summary>

/// 逆序

/// </summary>

public void Reverse()

{

if (length <= 1)

{

return;

}

SNode<T> tmp = pRear;

SNode<T> t1 = tmp.Next;

SNode<T> t2 = t1.Next;

for (int i = 0; i < length; i++)

{

t1.Next = tmp;

tmp = t1;

t1 = t2;

t2 = t2.Next;

}

pRear = t1;

}

4.双链表

/// <summary>

/// 逆序

/// </summary>

public void Reverse()

{

if (length <= 1)

{

return;

}

DNode<T> tmp = pHead;

DNode<T> t1 = tmp.Next;

DNode<T> t2 = t1.Next;

pHead.Next=null;

pRear = pHead;

for (int i = 1; i < length-1; i++)

{

t1.Next = tmp;

tmp.Prior = t1;

tmp = t1;

t1 = t2;

t2 = t2.Next;

}

t1.Next = tmp;

tmp.Prior = t1;

t1.Prior = null;

pHead = t1;

}

5.测试程序

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using LinearStruct;

namespace LineaTest

{

class Program

{

static void Main(string[] args)

{

/*顺序表测试

ILinearList<int> lst=new SeqList<int>(10);

for (int i = 0; i < 10; i++)

{

lst.Insert(i, i+10);

}

lst.Reverse();

for (int i = 0; i < 10; i++)

{

Console.Write(lst[i].ToString() + "   ");

}

*/

/*单链表测试

ILinearList<int> lst = new SLinkList<int>();

for (int i = 0; i < 10; i++)

{

lst.Insert(i, i + 10);

}

lst.Reverse();

for (int i = 0; i < 10; i++)

{

Console.Write(lst[i].ToString() + "   ");

}

*/

/*循环链表测试*/

/*

ILinearList<int> lst = new CLinkList<int>();

for (int i = 0; i < 10; i++)

{

lst.Insert(i, i + 10);

}

lst.Reverse();

for (int i = 0; i < 10; i++)

{

Console.Write(lst[i].ToString() + "   ");

}*/

/*双链表测试*/

ILinearList<int> lst = new DLinkList<int>();

for (int i = 0; i < 10; i++)

{

lst.Insert(i, i + 10);

}

lst.Reverse();

for (int i = 0; i < 10; i++)

{

Console.Write(lst[i].ToString() + "   ");

}

Console.ReadKey();

}

}

}

时间: 2024-11-23 02:37:10

线性结构逆序的相关文章

用结构体指针存储数据__正序_逆序下的输入

逆序输入 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #define maxn 1000 5 6 //邻接表(点很多,边较少) 7 //共有n个点,点编号为1~n,m条边 8 //无向图 9 10 struct node 11 { 12 long value; 13 struct node *next; 14 }*d[maxn+1]; 15 16 int main() 17 { 1

数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). 输入 第一行输入元素个数n: 第二行输入n个整数. 输出 第一行输出初始链表元素个数: 第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单链表. 示例输入 10 21 30 14 55 32 63

数据结构之 线性表 逆序简历链表

数据结构实验之链表二:逆序建立链表 Time Limit: 1000MS Memory limit: 65536K 题目描述 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据. 输入 第一行输入整数N;: 第二行依次输入N个整数,逆序建立单链表. 输出 依次输出单链表所存放的数据. 示例输入 10 11 3 5 27 9 12 43 16 84 22 示例输出 22 84 16 43 12 9 27 5 3 11 比顺序创建链表还要简单! #inc

算法习题---线性表之单链表逆序打印

一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即可 三:算法实现(这里使用方法一:递归实现简单易懂) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #def

2、线性结构——数据结构【基础篇】

线性结构 线性结构的4大特点: 1.有一个结点只有前驱 2.有一个结点只有后继 3.其他结点既有一个前驱也有一个后继 4.在逻辑上相邻在物理上也相邻数据的逻辑关系叫做线性结构 线性结构的3大类型: 1.线性表--线性表是n个数据元素的有限序列 存储结构: 顺序存储对应一组操作:顺序表 链式存储对应一组操作:单向链表.双向链表.循环链表 2.栈--限定只在表的一端(表尾)进行插入和删除操作的线性表:允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),其这一端被固定了. 存储结构

利用栈逆序元素

要求:利用栈将数组的元素逆序输出 分析:        1.数组中的元素是线性排列 2.栈的特点是先进后出 解题思路:将数组中的元素依次压栈,再出栈.就能实现对数组元素的逆序 1.定义结构体 #define N 50 struct mystack { int top; //栈顶元素 int data[N]; }; struct mystack selfStack={-1,{0}}; //初始栈为空 2.声明函数 int isEmpty();//判断栈是否为空 返回值:1-->空 0-->非空

Swift入门(十二)——利用Extension添加逆序输出字符串方法

Swift好像没有自带逆序输出字符串的方法,于是决定通过拓展(Extension)给String类添加一个逆序输出字符串的reverse方法. 首先新建一个Swift文件,命名规则不太清楚,于是暂且模仿OC叫做String+Operation吧,然后实现我们需要拓展的方法.下面先贴上代码,然后解释一下这段代码. //String+Operation.swifft import Foundation //逆序输出swift中的字符串 extension String{ func Reverse()

设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来

之前有过整理链表等的概念和基本算法.比较重要的是插入,删除,遍历,建表(尾插法,头插法) 回忆链表尾部插入结点:  1 #include <iostream> 2 using namespace std; 3  4 typedef struct Node{ 5     int data;//数据域 6     Node *next;//指针域 7 } Node, *List; 8  9 //在单链表的末位添加一个结点10 void addNode(List *head, int value)1

剑指Offer14 逆序链表

1 /************************************************************************* 2 > File Name: 14_ReverseListNode.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 15时47分32秒 6 *********************************