#include<bits/stdc++.h>
using namespace std;
typedef struct Node
{
int *elem;
int len;
int listsize;
}Sqlist;
int initlist(Sqlist &L,int len)///初始化顺序表
{
if(len==0)
{
len=100;
}
L.elem=(int *)malloc(len*sizeof(int));///申请空间
if(!L.elem)
{
return 0;
}
L.len=0;
L.listsize=100;
return 1;
}
int insertlist(Sqlist &L,int i,int e)///在i位置插入元素e
{
int *p,*q;
if(i<0||i>L.len)///i值不合法
{
return 0;
}
if(L.len>=L.listsize)///空间不足
{
int *newbase = (int *)realloc(L.elem,(L.listsize+10)*sizeof(int));///重新申请空间
if(!newbase)
{
return 0;
}
L.elem=newbase;
L.listsize+=10;
}
q=&L.elem[i];
for(p=&L.elem[L.len];p>=q;p--)
{
*p=*(p-1);///元素右移
}
*q=e;
L.len++;
return 1;
}
int deletelist(Sqlist &L,int e)///删除所有值为e的元素
{
int *p,*q;
int i=0;
while(i<L.len)
{
if(L.elem[i]==e)
{
q = &L.elem[i];
for(p=q;p<&L.elem[L.len];p++)
{
*p=*(p+1);///元素向左移动
}
L.len--;///长度减一
}
else
{
i++;
}
}
}
int deletelist2(Sqlist &L,int i)///删除第i个元素
{
int *p,*q;
q=&L.elem[i-1];
for(p=q;p<&L.elem[L.len];p++)
{
*p=*(p+1);///元素向左移动
}
L.len--;///长度减一
}
int sortlist(Sqlist &L)///排序
{
sort(L.elem,L.elem+L.len);
}
int printlist(Sqlist &L)///打印
{
for(int i=0;i<L.len;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int num;
Sqlist L;
initlist(L,n);
for(int i=0;i<n;i++)
{
scanf("%d",&num);
insertlist(L,i,num);
}
sortlist(L);
printlist(L);
int num2;
scanf("%d",&num2);
deletelist(L,num2);
printlist(L);
scanf("%d",&num2);
deletelist2(L,num2);
printlist(L);
}
return 0;
}
数据结构---顺序表
最新推荐文章于 2023-08-16 23:52:48 发布