永发信息网

设计一个包含初始化 求数据元素个数 插入删除和取数据元素的有序顺序表

答案:2  悬赏:10  手机版
解决时间 2021-05-19 08:18
  • 提问者网友:謫仙
  • 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));

}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯