实验一题目:实现顺序表各种基本运算的算法要求:
1、建立一个顺序表,输入n个元素并输出;
2、查找线性表中的最大元素并输出;
3、在线性表的第i个元素前插入一个正整数x;
4、删除线性表中的第j个元素;
5、将线性表中的元素按升序排列;
6、将线性表中的元素就地逆序(只允许用一个暂存单元);
# include<stdio.h>
# include<stdlib.h>
# include<iostream>
# include<malloc.h># define MaxSize 50
# define INITSIZE 100
# define OVERFLOW -1
using namespace std;
typedef int ElemType;
typedef struct
{
ElemType *data;
int length;
}SqList;
void InitList(SqList &L)//初始化
{
L.data=new ElemType[MaxSize];
L.length=0;
}
void CreatList(SqList &L)//构造链表
{
int i,N;
cout<<"请输入顺序表中元素的个数:";
cin>>N;
printf("请输入顺序表中的元素:\n");
for(i=0;i<N;i++)
{
cin>>L.data[i];
L.length++;
}
}
void ListInsert (SqList &L,int i,ElemType e)//插入
{
printf("在第几个位置插入:");
scanf("%d",&i);
if((i<1)||(i>L.length+1))
{
printf("输入不符合要求。");
}
int j;
if(L.length==MaxSize) printf("error!");
printf("插入数字几:");
scanf("%d",&e);
for(j=L.length-1;j>=i-1;j--)
{
L.data[j+1]=L.data[j];
}
L.data[i-1]=e;
++L.length;
// for(i=0;i<L.length;i++)
// printf("%d ",L.data[i]);
// printf("\n\n");
}
void ListDelete(SqList &L,int i)//删除
{
printf("在第几个位置删除:");
scanf("%d",&i);
if((i<1)||(i>L.length+1))
{
printf("输入不符合要求。");
}
int j;
for(j=i;j<=L.length-1;j++)
{
L.data[j-1]=L.data[j];
}
--L.length;
}
void GetElem(SqList L,int i,ElemType &e)//查找
{
printf("查找第几个元素:");
scanf("%d",&i) ;
if(i<1||i>L.length)
{
printf("输入不符合要求");
}
e=L.data[i-1];
printf("在第%d的数是:%d\n\n",i,e);
}
void DispList (SqList L)//便利
{
int i;
for( i=0;i<L.length;i++)
{
printf("%d ",L.data[i]);
}
printf("\n\n");
}
void Buble(SqList &L)//排序
{
int a=L.length,i,j,temp;
for(i=0;i<a;i++)
for(j=a-1;j>0;j--)
{
if(L.data[j]<L.data[j-1])
{
temp=L.data[j];
L.data[j]=L.data[j-1];
L.data[j-1]=temp;
}
}
}
void reverse(SqList &L)//就地逆序
{
int i=0,temp;
for(i=0;i<=L.length/2;i++)
{
temp=L.data[i];
L.data[i]=L.data[L.length-1-i];
L.data[L.length-1-i]=temp;
}
}
int main()
{
SqList L;
ElemType e;
int i;
cout<<"线性表初始化:\n";//printf("线性表初始化");
InitList(L);
printf("初始化成功:\n\n");
CreatList(L);
printf("输出线性表:\n");
DispList(L);
GetElem( L,i, e);
printf("插入元素 6,7,8 \n");
ListInsert ( L, i, e);
ListInsert(L,i , e);
ListInsert(L,i ,e );
DispList(L);
ListDelete(L,i);
DispList(L);
Buble(L);
printf("从小到大排序为:\n");
DispList(L);
cout<<"就地逆序:";
reverse(L);
DispList(L);
// printf("获取两个元素:\n");
return 0;
}