1 数据结构实验之链表一:顺序建立链表 (20 分)
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
if(i!=n-1)
printf("%d ",a[i]);
else printf("%d",a[i]);
}
return 0;
}
2 数据结构实验之链表二:逆序建立链表 (20 分)
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
int a[n];
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=n-1;i>=0;i--)
{
if(i!=0)
printf("%d ",a[i]);
else printf("%d",a[i]);
}
return 0;
}
3 数据结构实验之链表三:链表的逆置 (20 分)
#include<stdio.h>
int main()
{
int i,c=0,x;
int a[100001];
while(~scanf("%d",&x)&&x!=-1)
{
a[c]=x;
c++;
}
for(i=c-1;i>=0;i--)
{
if(i!=0)
printf("%d ",a[i]);
else printf("%d",a[i]);
}
return 0;
}
4 数据结构实验之链表四:有序链表的归并
#include<stdio.h>
void f(int a[], int l, int r)
{
int x=a[l],i=l,j=r;
if(i>=j) return;
while(i<j)
{
while(i<j&&a[j]>=x)j--;
a[i]=a[j];
while(i<j&&a[i]<=x)i++;
a[j]=a[i];
}
a[i]=x;
f(a,l,i-1);
f(a,i+1,r);
}
int main()
{
int m,n,a[200002],i,j,t;
scanf("%d %d",&m,&n);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
for(i=m;i<n+m;i++)
{
scanf("%d",&a[i]);
}
f(a,0,n+m-1);
for(i=0;i<n+m;i++)
{
if(i==n+m-1)
printf("%d",a[i]);
else printf("%d ",a[i]);
}
return 0;
}
5 数据结构实验之链表五:单链表的拆分 (20 分)
#include<stdio.h>
int main()
{
int n,a[100001],b[100001],c[100001],d=0,e=0,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]%2==0)
{
b[d]=a[i];
d++;
}
else
{
c[e]=a[i];
e++;
}
}
printf("%d %d\n",d,e);
for(i=0;i<d;i++)
{
if(i==d-1)
printf("%d\n",b[i]);
else printf("%d ",b[i]);
}
for(i=0;i<e;i++)
{
if(i==e-1)
printf("%d",c[i]);
else printf("%d ",c[i]);
}
return 0;
}
6 数据结构实验之链表七:单链表中重复元素的删除
#include<stdio.h>
#include<string.h>
int main()
{
int n,a[16],b[16],c=0,i,j,flag[16];
scanf("%d",&n);
memset(flag,0,sizeof(flag));
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
printf("%d\n",n);
for(i=n-1;i>=0;i--)
{
if(i==0)
printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j]==a[i])
{
flag[i]=1;
break;
}
}
}
for(i=0;i<n;i++)
{
if(flag[i]==0)
{
b[c]=a[i];
c++;
}
}
printf("%d\n",c);
for(i=c-1;i>=0;i--)
{
if(i==0)printf("%d",b[i]);
else printf("%d ",b[i]);
}
return 0;
}
7 双向链表
#include<stdio.h>
int main()
{
int n,m,a[51],i,b,c,x,flag=0,flag1=0;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
while(m--)
{
scanf("%d",&x);
for(i=0;i<n;i++)
{
if(a[i]==x)
{
if(i-1>=0)
{
b=a[i-1];
flag=1;
}
if(i+1<=n-1)
{
c=a[i+1];
flag1=1;
}
}
}
if(flag==1&&flag1==1)
printf("%d %d\n",b,c);
if(flag==1&&flag1==0) printf("%d\n",b);
if(flag==0&&flag1==1) printf("%d\n",c);
flag1=0;
flag=0;
}
return 0;
}
剩下的还是用链表吧,数组更复杂