下周就要上数据结构实验课,提前写写熟悉一下。顺序表还是比较简单了,和数组差不多。
#include <bits/stdc++.h>
using namespace std;
const int INIT_SIZE = 1001;
typedef struct node{
int *elem;
int length;
}Sqlist;
int a[1001];
void create(Sqlist &L,int n)
{
int i;
L.elem = new int[INIT_SIZE];
for( i = 0 ; i < n ; i++)
{
cin >> a[i];
}
L.length = n;
cout << "已经成功创建顺序表。"<<endl;
}
void print(Sqlist L)
{
int i;
cout << "输出顺序表为:" << endl;
for(i = 0 ; i < L.length ; i++)
{
cout << a[i] << endl;
}
cout << "顺序表输出完毕。"<<endl;
}
void Search(Sqlist L ,int &e)
{
int i;
int miner = a[0];
for(i = 1 ;i < L.length ; i++)
{
if(a[i] > miner)
{
miner = a[i];
}
}
e = miner;
}
int Insert(Sqlist &L,int pos,int e)
{
int i;
if(pos > L.length+1 || pos < 1)
return 0;
for(i = L.length-1 ; i > pos-2 ; i--)
{
a[i+1] = a[i];
}
a[pos-1] = e;
L.length++;
return 1;
}
int Erase(Sqlist &L,int pos)
{
int i;
if(pos < 1 || pos > L.length)
return 0;
for( i = pos ; i <= L.length - 1 ; i++)
{
a[i-1] = a[i];
}
L.length--;
return 1;
}
void Sort(Sqlist L)
{
int i,j,k;
for(i = 0 ;i < L.length-1 ; i++)
{
int k = i;
for(j = i+1 ; j < L.length; j++)
{
if(a[j] < a[k])
{
k = j;
}
}
if(k != i)
{
swap(a[i],a[k]);
}
}
}
void rsort(Sqlist L)
{
int i,t;
for( i = 0 ; i <= (L.length-1)/2 ; i++)
{
t = a[i];
a[i] = a[L.length-i-1];
a[L.length-i-1] = t;
}
}
int main()
{
Sqlist L;
int A,n,pos,T;
int e; //e用来保存查找的值
cout << "选择1则创建一个顺序表。"<<endl;
cout << "选择2则输出一个顺序表。"<<endl;
cout << "选择3则查找最大值并输出。"<<endl;
cout << "选择4则在第i个位置插入元素e."<<endl;
cout << "选择5则删除第i位置的元素。"<<endl;
cout << "选择6则将顺序表按升序排序。"<<endl;
cout << "选择7则将顺序表就地逆序。(只多占用一个存储单元)。"<<endl;
cout << "请输入你的操作次数:" << endl;
cin >> T;
while(T--)
{
cout << "请输入你的选择:" << endl;
cin >> A;
switch(A)
{
case 1:{
cout << "请输入顺序表的长度。"<<endl;
cin >> n;
cout << "请依次输入每个位置的元素:"<<endl;
create(L,n);
break;
}
case 2:{
print(L);
break;
}
case 3:{
cout <<"正在查询最大值。。。。"<<endl;
Search(L,e);
cout <<"最大值为:"<< e << endl;
break;
}
case 4:{
cout << "请选择你要插入的元素以及你选择要插入的位置:";
cin >> e >> pos;
if(Insert(L,pos,e))
cout << "已成功插入" << endl;
else
cout << "位置不合法。"<<endl;
break;
}
case 5:{
cout << "请输入你要删除的位置:";
cin >> pos;
if(Erase(L,pos))
cout << "已经成功删除该元素。"<<endl;
else
cout << "删除位置不正确。"<<endl;
break;
}
case 6:{
cout << "正在将顺序表按升序排序...";
Sort(L);
cout << "已经成功排好序。"<<endl;
break;
}
case 7:{
cout << "正在将顺序表就地逆序。。。"<<endl;
rsort(L);
cout << "已成功逆序排好。"<<endl;
break;
}
}
}
}