当前位置:首页 » 操作系统 » 顺序表逆置算法

顺序表逆置算法

发布时间: 2022-05-31 22:09:31

㈠ 用顺序表将表逆置

把void Reverse(T data[],int length);的声明改为void Reverse();
这个函数下面的定义改为
template<class T>
void SeqList<T>::Reverse()
{
int temp;
for(int i=0;i<=length/2;i++)
{
temp=data[i];
data[i]=data[length-i-1];
data[length-i-1]=temp;
}
}
程序最后的调用改为
a.Reverse();
a.PrintList();

㈡ 数据结构:设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)。

设计一个高效算法,将顺序表中的所有元素逆置,要求算法空间复杂度为O(1)扫描顺序表L的前半部分元素L.data[i] (0<=i<L.length/2),将其与后半部分的对应元素L.data[L.length-1-i]进行交换即可。

顺序表的存储只要确定了起始位置,表中任一元素的地址都通过下列公式得到:LOC(ai)=LOC(a1)+(i-1)*L 1≤i≤n 其中,L是元素占用存储单元的长度。

(2)顺序表逆置算法扩展阅读:

数据的物理结构是数据结构在计算机中的表示,它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种。

数据元素的机内用二进制位(bit)的位串表示数据元素。当数据元素有若干个数据项组成时,位串中与各个数据项对应的子位串称为数据域(data field)。

㈢ 写一个算法,实现顺序表的就地逆置,即在原表的存储空间将线性表(a1,a2,...an-1,an)逆置为(an,an-1,...

运行过了,没有任何问题,有什么不明白的可以交流下!!

#include <stdio.h>
int main()
{
typedef struct Lnod
{
int data;
struct Lnod *next;
}Lnod,*Linklist;

Linklist p,m,n,r,L,a,b;
int i;
L=(Linklist)malloc(sizeof(Lnod)*5);
if(!L)exit(0);
L->next=NULL;
for(i=0;i<5;i++)
{
p=(Linklist)malloc(sizeof(Lnod));
if(!p)exit(0);
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
a=L->next;
printf("原来的链表中的元素为:\n");
while(a)
{
printf("%d, ",a->data);
a=a->next;
}
printf("\n");

m=L->next;
n=m->next;
while(n->next)
{
r=n->next;
n->next=m;
m=n;
n=r;
}

n->next=m;
L->next->next=NULL;
L->next=n;

b=L->next;

printf("\n\n逆置之后链表中的元素为:\n");
while(b)
{
printf("%d, ",b->data);
b=b->next;
}
printf("\n");

return 0;
}

c编程高手团队正在招新,有意者速速行动,一起学习,一起努力!!!

㈣ 【数据结构】线性表(包括有序表)在顺序表和链表上的插入、删除、逆置操作算法

1)初始化指针p和q,分别指向链表中相邻的两个元素;

2)当p->next不为空时,做如下处理:
①若相邻两元素不相等时,p和q都向后推一步;
②否则,当相邻元素相等时,删除多余元素。
【算法源代码】
void Delete_Equal(LinkList *L)
{ p=(*L)->next;q=p->next; /*p和q指向相邻的两个元素*/
while(p->next)
{ if(p->data!=q->data) /*若相邻两元素不相等时,p和q都向后推一步*/
{ p=p->next; q=p->next; }
else
{ while(q->data==p->data) /*当相邻元素相等时删除多余元素*/
{ r=q;
q=q->next;
free(r);
}
p->next=q;p=q;q=p->next;
}/*else*/
}/*while*/
}/*Delete_Equal */
试设计一个算法,对带头结点的单链表实现就地逆置。

【算法分析】
1)空表或长度为1的表,不做任何处理;
2)表长大于2时,做如下处理:
①首先将整个链表一分为二,即从链表的第一元素结点处断开;
②逐个地把剩余链表的当前元素q插入到链表的头部。
【算法源代码】
void LinkList_reverse(LinkList L)
{ if(!L->next||!L->next->next) return;
p=L->next; q=p->next; s=q->next; p->next=NULL; /*从链表的第一元素结点处断开*/
while(s->next)
{q->next=p;p=q;
q=s;s=s->next; /*把L的元素逐个插入新表表头*/
}
q->next=p;s->next=q;L->next=s;
}/*LinkList_reverse*/

㈤ 顺序表逆置的算法思想和算法实现是什么

试写一算法,实现顺序表的就地逆置。

即利用原表的存储空间将线性表(a1,a2,…,an)
逆置为(an,an-1,…,a1)。
实现下列函数:
void Inverse(SqList &L);
顺序表类型定义如下:
typedef struct {
ElemType *elem;
int length;
int listsize;
} SqList;
void Inverse(SqList &L)

㈥ 编写一个算法实现顺序表的就地逆置(即使用原顺序表的存储空间)'

int nilist(SList *p,int i)
{int temp;<br/>int j;<br/>j=p->n;<br/>j=j/2;<br/>for(i=p->n-1;i>=j;i--)<br/>{temp=p->data[i];p->data[i]=p->data[p->n-1-i];p->data[p->n-1-i]=temp;}
return(1);
}随便写的,有错误自己问老师.

㈦ 关于数据结构 问题:设计一个算法,将顺序表中的所有元素逆置。我自己写的算法和答案不一样,帮我看看

你的算法虽然效率低点,但还是可以完成任务的。
你希望取出最后一个元素,然后把其他元素向后移,把最后的那个元素放到前面空出来的位置上。
程序中的错误在于,向后移动时,应该从后向前循环。你这样从前向后循环,整个顺序表都被赋成第一个元素的数值了。

㈧ 编写算法,实现顺序表逆置的操作

node *reserve(node*head)
{
node*p1,*p2,*p3;
if((head==NULL)||(head->next==NULL))
return head;

p1=head;
p2=p1->next;
while(p2!=NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next=NULL;
p1=head;
return head;
}

㈨ 试用一个算法,实现顺序表的就地逆置,

int a[n]; //....
for(int i=0;i<n/2;i++)
{
int t=a[i];
a[i]=a[10-i-1];
a[10-i-1]=t;
}

热点内容
手机f加密 发布:2024-05-19 03:28:47 浏览:225
用什么密码写日记 发布:2024-05-19 03:27:57 浏览:303
数据库access2003 发布:2024-05-19 02:49:39 浏览:620
碧蓝航线pc挂机脚本 发布:2024-05-19 02:30:03 浏览:589
脚本fir 发布:2024-05-19 02:28:57 浏览:261
阿里云独享服务器 发布:2024-05-19 02:23:54 浏览:253
织梦源码ga 发布:2024-05-19 02:23:20 浏览:571
java文件名后缀 发布:2024-05-19 02:14:39 浏览:956
快手点榜脚本 发布:2024-05-19 02:08:44 浏览:163
pythonforinkeys 发布:2024-05-19 01:55:44 浏览:793