还有 一小时 交 作业 哈 时间有限 会的同学 请 快点 教教咱
设计一个包含初始化 求数据元素个数 插入删除和取数据元素的有序顺序表
- 提问者网友:謫仙
- 2021-05-18 12:08
- 五星知识达人网友:空山清雨
- 2021-05-18 12:55
#include<iostream.h>
#define maxsize 20
template<class T>
class Seqlist
{
private:
T a[maxsize];
int len;
public:
void init(); //初始化
int length();//求长度
void insert(Seqlist &l,int i,T x); //插入
void deleted(Seqlist &l,int i);//删除
void print();//输出
void create(Seqlist &L,T e);//创建
};
template<class T>
void Seqlist<T>::init()
{
len=0;
}
template<class T>
int Seqlist<T>::length()
{
return len;
}
template<class T>
void Seqlist<T>::insert(Seqlist &l,int i,T x)
{
if(l.len>maxsize)
cout<<"overflow"<<endl;
else if (i<1||i>l.len+1)
cout<<"position is not correct!"<<endl;
else
{
for(int j=l.len;j>=i;j--)
l.a[j+1]=l.a[j];
l.a[i]=x;
l.len++;
}
}
template<class T>
void Seqlist<T>::deleted(Seqlist &l,int i)
{
if (i<1||i>l.len)
cout<<"position is not correct!"<<endl;
else
{
for(int j=i+1;j<=l.len;j++)
l.a[j-1]=l.a[j];
l.len--;
}
}
template<class T>
void Seqlist<T>::print()
{
for(int i=1;i<=len;i++)
cout<<a[i]<<'\t';
cout<<endl;
}
template<class T>
void Seqlist<T>::create(Seqlist &L,T e)
{
cout<<"输入数据,当输入-1时结束:"<<endl;
cin>>e;
while(e!=-1)
{
L.insert(L,L.length()+1,e);
cin>>e;
}
}
void main()
{
Seqlist<int>L;
int e,i;
L.init();
L.create(L,e);
cout<<"输出顺序表:"<<endl;
L.print();
cout<<"输入要删除元素的位置:";
cin>>i;
L.deleted(L,i);
cout<<"输出删除后的顺序表:"<<endl;
L.print();
}
- 1楼网友:冷風如刀
- 2021-05-18 14:17
typedef struct
{ DataType list[Maxsize];
int size;
}SeqList;
void ListInitiate(SeqList *L)
{ L->size = 0;
}
int ListLength(SeqList L)
{ return L.size;
}
int ListInsert(SeqList *L, int i, DataType x)
{ int j;
if(L->size >= Maxsize)
{ printf("顺序表已满无法插入! \n");
return 0;
}
else if(i < 0 || i > L->size )
{ printf("参数i不合法! \n");
return 0;
}
else
{ for(j = L->size; j > i; j--)
L->list[j] = L->list[j-1];
L->list[i] = x;
L->size ++;
return 1;
}
}
int ListDelete(SeqList *L, int i, DataType *x)
{ int j;
if(L->size <= 0)
{ printf("顺序表已空无数据元素可删! \n");
return 0;
}
else if(i < 0 || i > L->size-1)
{ printf("参数i不合法");
return 0;
}
else
{ *x = L->list[i];
for(j = i+1; j <= L->size-1; j++)
L->list[j-1] = L->list[j];
L->size--;
return 1; }
}
int ListGet(SeqList L, int i,DataType *x)
{ if(i < 0 || i > L.size-1)
{
printf("参数i不合法! \n");
return 0;
}
else
{ *x = L.list[i];
return 1; }
}
void SeqListSort(SeqList *L)
{ int i ,j ,temp;
for(j = 0; j < L->size-1; j++)
for(i = 0; i < L->size-1-j; i++)
if(L->list[i] > L->list[i+1])
{
temp = L->list[i];
L->list[i] = L->list[i+1];
L->list[i+1] = temp;
}
}
int SeqListInsert(SeqList *L, int m)
{ int p = 0, j, i;
if(L->size >= Maxsize)
{ printf("顺序表已满无法插入! \n");
return 0;
}
for(i = 0; i < L->size; i++)
if(m > L->list[i])
p++;
for(j = L->size; j > p; j--)
L->list[j] = L->list[j-1];
L->list[p] = m;
L->size++;
return 1;
}
void main()
{
SeqList myList;
int i , n , x ,m;
ListInitiate(&myList);
printf("请输入原始数据元素个数:");
scanf("%d", &n);
printf("请输入原始数据元素:\n");
for(i = 0; i < n; i++)
{scanf("%d", &x); ListInsert(&myList, i, x) ;}
printf("\n原始数据元素为:\n");
for(i = 0; i < ListLength(myList); i++)
if(ListGet(myList, i, &x))printf("%d ", x);
printf("\n正在对该顺序表递增排序......,");
SeqListSort(&myList);
printf("\n排序后的数据元素为:");
for(i = 0; i < ListLength(myList); i++)
if(ListGet(myList, i, &x))printf("%d ", x);
printf("\n数据元素个数为: %d\n", ListLength(myList));
printf("\n请输入要插入的数据元素:");
scanf("%d", &m);
SeqListInsert(&myList, m);
printf("\n插入新的数据元素之后有序顺序表为:\n");
for(i = 0; i < ListLength(myList); i++)
if(ListGet(myList, i, &x))printf("%d ", x);
printf("\n此时数据元素个数为: %d\n", ListLength(myList));
printf("\n请输入要删除的元素位置(0~%d):", n);
scanf("%d", &n);
ListDelete(&myList, n, &x);
printf("\n删除第%d个元素后的顺序表为:\n", n);
for(i = 0; i < ListLength(myList); i++)
if(ListGet(myList, i, &x))printf("%d ", x);
printf("\n此时的数据个数为: %d\n", ListLength(myList));
}