导航:首页 > 源码编译 > 编写算法实现线性表逆置

编写算法实现线性表逆置

发布时间:2022-05-20 23:27:43

Ⅰ 求解一道编程题:用单链表作存储结构,编写一个实现线性表中元素逆置的算法

伪代码:

NewList
FUN(List)
//
函数

nLenth
=
List.lenth();

nCount
=
0;

FOR
n
=
nLenth
to
1;
//nLenth个节点,单向链表会要麻烦一点

{

NewList
[nCount]
=
List
[n];

nCount
+=
1;

}

Delete
List;

RETURN
NewList;

时间复杂度为
n^2
(主要原因:单向链表)

Ⅱ 以单链表为存储结构,写一实现线性表就地逆置的算法(用C++写)

用头插入法来做,直到输入0时,按enter键结束。

#include <iostream>
using namespace std;
typedef struct lnode
{
int data;
struct lnode *next;
}Lnode,*Linklist;
Linklist Creat_linklist()
{
Linklist L=NULL;
Lnode *s;
int x;
cin>>x;
while(x!=0)
{
s=new Lnode;
s->data=x;
s->next=L;
L=s;
cin>>x;
}
return L;

}
int main()
{

cout<<"请输入数据:"<<endl;
Linklist p;
p=Creat_linklist();

while(p!=NULL)
{
cout<<p->data<<' ';
p=p->next;
}

return 0;
}

Ⅲ 线性表的就地逆置的程序代码怎么写

1. 顺序表:
要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:
// 表结构定义同上
void ReverseList( Seqlist *L)
{
Datatype t ; //设置临时空间用于存放data
int i;
for ( i=0 ; i < L->length/2 ; i++)
{ t = L->data[i];//交换数据
L -> data[ i ] = L -> data[ L -> length - 1 - i ] ;
L -> data[ L -> length - 1 - i ] = t ;
}
}

2. 链表:
也是可以用交换数据的方式来达到逆置的目的,但是由于是单链表,数据的存取不是随机的,因此算法效率太低,我们可以利用指针的指向转换来达到表逆置的目的。算法是这样的:
// 结构定义略
LinkList ReverseList( LinkList head )
{
// 将head 所指的单链表逆置
ListNode *p ,*q ;//设置两个临时指针变量
if( head->next && head->next->next)
{
//当链表不是空表或单结点时
p=head->next;
q=p->next;
p -> next=NULL;//将开始结点变成终端结点
while (q)
{//每次循环将后一个结点变成开始结点
p=q;
q=q->next ;
p->next = head-> next ;
head->next = p;
}
return head;
}
return head;//如是空表或单结点表,直接返回head
}
楼上的代码胡弄洋鬼子呢,也没实现逆置,只是逆向输出了一下!

Ⅳ 设计一个算法,将线性表逆置,要求逆线性表占用原线性表空间,用顺序和单链表两种方法表示,最好有注释哦

顺序表用逆序数组的方法,链表用一个结点(无需分配,自动变量即作新头结点尾插法即可如果带空头结点头->next =n.next,不带空头结点头作尾n.next作新头结点即可(要改写头结点)!

Ⅳ C语言实现线性表的逆置问题,顺序和单链表。在线等高手

逆置有两种方法,第一是把所有节点反过来。还有一种就是改变节点中的值。
第一种情况,其实可以考虑用头插法,来实现逆置。
下面的算法是基于头插法的思想,逆置链表的,仅供参考。
LinkList anti_linklist(LinkList demo)
{
LInkList *p,*q;//work pointer
LinkList head;
head=new LinkList();
head->next=null;//init head pointer
p=demo->head->next;//make p points to the first node
if(p==null)
return null;//the linklist is null
while(p!=null)
{
q=p;
q->next=head->next;
head->next=q;
p=p->next;
}
}

这个是我回答之前的一个问题的答案。供你参考。

Ⅵ 设有一个用向量表示的线性表A(1:n),要求写一个将此线性表逆置的算法

参考别人的
要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:
// 表结构定义同上
void ReverseList( Seqlist *L)
{
Datatype t ; //设置临时空间用于存放data
int i;
for ( i=0 ; i < L->length/2 ; i++)
{ t = L->data[i];//交换数据
L -> data[ i ] = L -> data[ L -> length - 1 - i ] ;
L -> data[ L -> length - 1 - i ] = t ;
}
}

阅读全文

与编写算法实现线性表逆置相关的资料

热点内容
学好玩命令方块 浏览:953
手机解压两个分开的压缩包 浏览:963
程序员想调薪怎么和领导说 浏览:856
编译的底层实现 浏览:550
32位机器上编译出64的动态库 浏览:924
python办公数据类型 浏览:913
传统8051单片机介绍 浏览:628
app拉新公司如何运营 浏览:618
枪法pdf 浏览:62
ios如何设置安卓虚拟返回键 浏览:697
mysql命令执行sql 浏览:97
惠普内嵌服务器怎么打开 浏览:413
cmd命令查看网络 浏览:819
程序员秘密 浏览:932
如何宣传app引流 浏览:73
图说红楼梦中央编译 浏览:173
php查询赋值 浏览:271
java程序员面试宝典第四版pdf 浏览:931
2021流行加密加长睫毛膏 浏览:644
怎么用windows自带编译器 浏览:397