数据结构实验之链表一:顺序建立链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n,m;
int a[100005];
int main()
{
int i;
scanf("%d",&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]); //if后面的一句是默认当if条件成立时进行的
else printf("%d\n",a[i]);
}
return 0;
}
数据结构实验之链表二:逆序建立链表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n,m;
int a[100005];
int main()
{
int i;
scanf("%d",&n);
i=n; //从最后一个开始输入
while(i--) //i提前在while里面减一下所以开始第一个存在n-1的位置
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
if(i<n-1)printf("%d ",a[i]);
else printf("%d\n",a[i]);
}
return 0;
}
数据结构实验之链表三:链表的逆置
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n,m;
int a[100005];
int main()
{
int i=0;
int x;
while(scanf("%d",&x)!=EOF)
{
if(x==-1)break;
a[i++]=x;
}
i-=1;
for(;i>=0;i--)
{
if(i>0)printf("%d ",a[i]);
else printf("%d\n",a[i]);
}
return 0;
}
数据结构实验之链表四:有序链表的归并
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n,m;
int a[100005],b[100005];
int main()
{
int i;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]); //存第一个数组
}
for(i=0;i<m;i++)
{
scanf("%d",&b[i]); //存第二个数组
}
i=0;
int j=0; //用两个i,j指针进行比较
while(n&&m) //当a数组或b数组有一个完全输出完就跳出循环
{
if(a[i]<b[j])
{
printf("%d ",a[i]); //小的直接输出
i++;
n--;
}
else {
printf("%d ",b[j]);
j++;
m--;
}
}
while(n) //若a数组中还有数就输出,没有不会执行
{
if(n==1)printf("%d\n",a[i]);
else
printf("%d ",a[i]);
i++;
n--;
}
while(m) //b数组同理,有数就输出,没数不执行
{
if(m==1)printf("%d\n",b[j]);
else
printf("%d ",b[j]);
j++;
m--;
}
return 0;
}
7-5 数据结构实验之链表五:单链表的拆分
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
int a[100005],b[100005];
int main()
{
int i;
int ou=0,ji=0; //ou就是偶,表示偶数组中有多少元素,ji就是奇数组
scanf("%d",&n);
for(i=0;i<n;i++)
{
int x;
scanf("%d",&x);
if(x%2==0) //如果x是偶数,存进a数组
{
a[ou]=x;
ou++;
}
else {
b[ji]=x;
ji++;
}
}
printf("%d %d\n",ou,ji); //先输出偶数和奇数的个数,然后分别输出就行了
for(i=0;i<ou;i++)
{
if(i<ou-1)
printf("%d ",a[i]);
else
printf("%d\n",a[i]);
}
for(i=0;i<ji;i++)
{
if(i<ji-1)
{
printf("%d ",b[i]);
}
else
{
printf("%d\n",b[i]);
}
}
return 0;
}
7-6 数据结构实验之链表七:单链表中重复元素的删除
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
int a[20];
int vis[20]; //用vis数组来表示元素是否被删除了,如果被删除了就
//标记为1,没被删除标记为0
int main()
{
int i,j;
scanf("%d",&n);
for(i=n-1;i>=0;i--) //这里从n-1开始存模拟链表逆序,保证删除先输入的
{
scanf("%d",&a[i]);
}
int ge=n; //ge表示还剩下多少个,为了便于理解用汉语拼音,在
//以后写代码还是推荐用英语
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[j]==a[i]&&vis[j]==0) //当两个相等,并且还没被删,就标记为1,表示被删除了
{
vis[j]=1;
ge--;
}
}
}
printf("%d\n",n);
for(i=0;i<n;i++) //将最原始的直接输出
{
if(i==n-1)printf("%d\n",a[i]);
else printf("%d ",a[i]);
}
printf("%d\n",ge); //输出删除后的
for(i=0;i<n;i++)
{
if(vis[i]==0) //vis是0则没被删除
{
if(ge==1)printf("%d\n",a[i]);
else printf("%d ",a[i]);
ge--;
}
}
return 0;
}