设有一个线性表La,请用算法分别完成顺序存储结构和链式存储结构下线性表La的逆序。

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-07
(1)下列叙述中正确的是 A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的 B)线性表

下列叙述中正确的是
A.线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的
B.线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
C.线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构
D.上述三种说法都不对

正确答案:B。线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构。

这不是很简单码?
头尾交换即可阿?

template
const int N = 1024;
struct list{
DataType data[N];
int max;
};
typedef struct list List;
void reverseList(List &l)
{
for(int i=0;i<max/2;++i)
{
l.data[i] = l.data[i]+l.data[max-i-1];
l.data[max-i-1] = l.data[i]-l.data[max-i-1];
l.data[i] = = l.data[i]-l.data[max-i-1];
}
}

附加空间为1,(其实为0,i不算)

#include<iostream>
#define MAXSIZE 50
using namespace std;typedef struct node //链式结构线性表结点
{
int data;
struct node *next;
}SLink;typedef struct list //顺序结构线性表结点
{
int length;
int data[MAXSIZE];
}List;void LinkList() //链式
{
//初始化链表
SLink *La=(SLink *)malloc(sizeof(SLink));
SLink *n1=(SLink *)malloc(sizeof(SLink));
SLink *n2=(SLink *)malloc(sizeof(SLink));
SLink *n3=(SLink *)malloc(sizeof(SLink));
SLink *n4=(SLink *)malloc(sizeof(SLink));
SLink *n5=(SLink *)malloc(sizeof(SLink));
La->next=n1;//La为头指针
n1->data=1;
n1->next=n2;
n2->data=2;
n2->next=n3;
n3->data=3;
n3->next=n4;
n4->data=4;
n4->next=n5;
n5->data=5;
n5->next=NULL;
//输出链表的值
cout<<"\t排序前:"<<endl;
SLink *p=La->next;
while(p!=NULL)
{
cout<<p->data<<endl;
p=p->next;
}
//链表逆序
p=La->next;
SLink *q=NULL;
La->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=La->next;
La->next=q;
}
//输出逆序后链表
cout<<"\t排序后:"<<endl;
SLink *k=La->next;
while(k!=NULL)
{
cout<<k->data<<endl;
k=k->next;
}
}void SquenceList() //顺序表
{
//初始化顺序表
List La;
La.length=5;
La.data[0]=1;
La.data[1]=2;
La.data[2]=3;
La.data[3]=4;
La.data[4]=5;
//输出顺序表
int i,j,temp;
cout<<"\t排序前:"<<endl;
for(i=0;i<La.length;i++)
{
cout<<La.data[i]<<endl;
}
//逆序顺序表
for(i=0,j=La.length-1;i<j;i++,j--)
{
temp=La.data[i];
La.data[i]=La.data[j];
La.data[j]=temp;
}
cout<<"\t排序后:"<<endl;
//输出逆序后的顺序表
for(i=0;i<La.length;i++)
{
cout<<La.data[i]<<endl;
}
}int main()
{
cout<<"链式表"<<endl;
LinkList();
cout<<"顺序表:"<<endl;
SquenceList();
}

http://wenku.baidu.com/view/81694a01a6c30c2259019e72.html上去看看

  • 给定一个顺序存储的线性表,请设计一个算法,删除所有大于min而且小于max...
    答://删除表中所有大于min而且小于max的元素 status DeleteItem(SeqList &L,int min,int max){ int i,j;if(min >= max)return ERROR;for(i=0;i<L.length;i++){ if(L.elem[i]>min && L.elem[i]<max){ for(j=i;j<L.length;j++){ L.elem[j]=L.elem[j+1];--L.length;} }...
  • 一个线性表采用顺序表表示,设计一个算法,删除其中所有值等于X的元素...
    答:/* 存储空间基址 */int length; /* 当前长度 */int listsize; /* 当前分配的存储容量(以sizeof(ElemType)为单位) */} SqList;/* 操作结果:构造一个空的顺序线性表L */void InitList(SqList *L) {L->elem=malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)exit(OVERFLOW); /*...
  • 利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并...
    答:include<stdio.h> include<stdlib.h> include<malloc.h> typedef int status;typedef int ElemType;define TRUE 1 define ERROR 0 define FALSE 0 define OK 1 define OVERFLOW -2 define list_init_size 100 define listincrement 10 typedef struct{ ElemType *elem;int length;int listsize;}sq...
  • 数据结构C语言
    答:1.已知线性表LA,LB数据元素都按递增排列,要求将LA,LB归并为LC,请建立一个LC,且LC数据元素仍按递增有序排列 void MergeList(List La, List Lb,List &LC){ ...} 这个例题怎么不是用List LC而是List &LC?/// 这么说吧你用List LC是不能够修改实参的,也就是不能修改外面的哪个List.List &L...
  • 数据结构算法实现:利用两个线性表LA和LB分别表示两个集合A和B,现要求...
    答:我写的,你编译一下,改一改就行了。void Union(LinkList *L1,LinkList *L2,LinkList *&L3)//交集 { LinkList *p=L1->next,*q=L2->next,*s,*c;L3=(LinkList *)malloc(sizeof(LinkList));L3->next=NULL;c=L3;while(p!=NULL&&q!=NULL){ if(p->datadata){ s=(LinkList *)m...
  • 若一个线性表L采用顺序储存结构储存,其中所有元素为整数.设计一个算法...
    答:void Delxtoy(SeqList &L, int x, int y){ int i,D_num=0;for(i=0;i<L.length;i++){ if(L.data[i]>=x && L.data[i]<=y) D_num++;if(D_num>0 && (L.data[i]<x || L.data[i]>y)) L.data[i-D_num]= L.data[i];} L.length=L.length-...
  • 有一个线性表(a1,a2,...,an),采用带头结点的单链表L存储.设计一算法将...
    答:LinkList p=L->next; /* p指向第一个结点 */ while(p){ i++;p=p->next;} return i;} /* 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) */ /* 操作结果:用e返回L中第i个数据元素的值 */ Status GetElem(LinkList L,int i,ElemType *e){ int j;LinkList p; /* ...
  • 若一个线性表L采用顺序结构存储,其中所以元素为整数。设计一个算法,将...
    答:void move(SeqList *L){ int i, j;int temp;for (i = 0, j = L->length -1; i < j; ){ while (i < j && L->data[i] < 0)i ++;while (i < j && L->data[j] > 0)j --;if (i < j){ temp = L->data[i];L->data[i] = L->data[j];L->data[j] =...
  • 已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表L...
    答:cout<<"采用手动方式建立非递减有序单向链表:"<<endl;LinkList _LinkList = new LNode();if(_LinkList){_LinkList->next = NULL;} int i = 0;int j = 0;int k = 0;ElemType _Var;for(i=0;i<_int;i++){ cout<<"输入第"<<(i+1)<<"个元素:";cin>>_Var;Insert_Sort_...
  • 给定一个顺序存储的线性表,请设计一个算法,查找该线性表中最长递增子...
    答:解法1:很明显用动态规划的算法,选取下面的阶段(这种选法极为常见),可使阶段间的关系具有无后效性。阶段:在所有以元素k结尾的子数组中,选出其中的最长递增子序列,k=1,2...n。状态:以元素k结尾的最长递增子序列中只有一个最长的递增子序列。决策:决定元素k结尾的最长递增子序列有k-1种...