怎样将线性表逆置
发布网友
发布时间:2023-07-26 04:27
我来回答
共2个回答
热心网友
时间:2024-11-28 16:38
线性表逆置的方法如下:
线性表逆置一般通过程序来实现。通过下面的程序,可以将线性表向量a=(a1,a2,a3,…,an)逆置为a'=(an,an-1,…,a2,a1)。
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000
typedef struct
{
int data[maxsize];
int last;
}ZgList;
typedef struct Node
{
int data;
struct Node *next;
}Node;
void CreateOrder(ZgList *L)
{
int n;
int i;
while(1)
{
cout<<"请输入顺序表长度:"<<endl;
cin>>n;
if(n>0)
{
break;
}
else
{
cout<<"Error:顺序表的长度必须大于零!"<<endl;
}
}
cout<<"请输入顺序表元素:"<<endl;
L->last=n-1;
for(i=0;i<n;i++)
{
cin>>L->data[i];
}
}
void PrintOrder(ZgList *L)
{
int i;
if(L->last==-1)
{
cout<<"当前顺序表为空。"<<endl;
}
else
{
cout<<"当前顺序表为:"<<endl;
for(i=0;i<=L->last;i++)
{
cout<<L->data[i]<<" ";
}
cout<<endl;
}
}
void ReverseOrder(ZgList *L)
{
int i;
int j;
for(i=0,j=L->last;i<j;i++,j--)
{
L->data[i]^=L->data[j]^=L->data[i]^=L->data[j];//值互换
}
cout<<"顺序表逆置成功!"<<endl;
}
void PrintChain(Node *H)
{
cout<<"当前单链表为:"<<endl;
Node *p;
p=H->next;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//尾插法建单链表
void CreateChain(Node *H)
{
Node *s;
Node *p;//动态指向表尾
p=H;
int n;
int i;
H->next=NULL;//初始化,以确保重复建表的无误!!!!!
//输入N,并判断N是否合法
while(true)
{
cout<<"请输入单链表长度:";
cin>>n;
if(n>0)
{
break;
}
else
{
cout<<"Error:单链表的长度必须大于零!"<<endl;
}
}
cout<<"请输入单链表:"<<endl;
for(i=0;i<n;i++)
{
s=(Node *)malloc(sizeof(Node));
cin>>s->data;
s->next=p->next;
p->next=s;
p=p->next;
}
cout<<"成功创建新单链表!"<<endl;
PrintChain(H);
}
//利用顺序遍历同时用头插法重建单链表
void ReverseChain(Node *H)
{
Node *h;
Node *p;
Node *temp;
h=(Node *)malloc(sizeof(Node));
h->next=NULL;//初始化
p=H->next;
while(p!=NULL)
{
temp=p->next;
p->next=h->next;
h->next=p;
p=temp;//p=p->next
}
H->next=h->next;//将新表的头指针赋给原头指针(实现逆序)
cout<<"单链表逆置成功!"<<endl;
}
void Choose(int choice,ZgList *L,Node *H)
{
switch(choice)
{
case 4:
CreateOrder(L);
break;
case 5:
PrintOrder(L);
break;
case 6:
ReverseOrder(L);
break;
case 1:
CreateChain(H);
break;
case 2:
PrintChain(H);
break;
case 3:
ReverseChain(H);
break;
default:
exit(0);
}
}
void Print(ZgList *L,Node *H)
{
int choice;
cout<<"1.建立新单链表"<<endl;
cout<<"2.打印当前单链表"<<endl;
cout<<"3.将单链表逆置"<<endl<<endl;
cout<<"4.建立新顺序表"<<endl;
cout<<"5.打印当前顺序表"<<endl;
cout<<"6.将顺序表逆置"<<endl<<endl;
cout<<"7.按其它任意键退出"<<endl;
cout<<"--------------------"<<endl;
cout<<"请选择你要的操作:";
cin>>choice;
Choose(choice,L,H);
}
int main(void)
{
ZgList L;
ZgList *p;
p=&L;
L.last=-1;//初始化
Node *H;
H=(Node *)malloc(sizeof(Node));
H->next=NULL;//初始化
Print(p,H);
while(true)
{
cout<<"按enter键继续...";
getchar();
getchar();
system("cls");
Print(p,H);
}
return 0;
}
线性表(亦作顺序表)是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中是广泛采用的一种数据结构。
热心网友
时间:2024-11-28 16:38
#define maxsize 1000
typedef struct sqlist{
char data[maxsize];
int n;
}Sqlist;
main()
{
int i,j,t;
Sqlist a;
for(i=0;i<=maxsize/2;i++)
{
t=a.data[i];
a.data[i]=a.data[maxsize-i-1];
a.data[maxsize-i-1]=t;
}
for(i=0;i<maxsize;i++)
printf("%d\t",a.data[i]);
}