问题实在太多了,改了之后就已经不记得都修改过哪里了。#include<stdio.h>
#define N 10
typedef struct list
{
int a[N];
int length;
}info;
void VOID(info*p);
void SCANF(info*p);
void SUM(info *p, info *n);
void change(info *p);
void swap(info *p, int m);
int main()
{
info A, B, C;
VOID(&A);
VOID(&B);
VOID(&C);
SCANF(&A);
SCANF(&B);
SUM(&A, &B);//合并两个顺序表
swap(&A,2);//将顺序表改变顺序后
return 0;
};
void VOID(info*p)// 将顺序表清空
{
p->length = 0;
}
void SCANF(info*p)//向顺序表内输入数据;
{
char ch;
int x;
//首先进行判满操作
if (p->length>N)
printf("表已经满了,无法输入数据");
else
{
/* 进行数据的输入 */
do
{
scanf("%d", &x);
p->a[p->length++] = x;
getchar();
printf("是否还要添加元素(y|n):");
scanf("%c", &ch);
} while (ch == 'y' || ch == 'Y');
}
}
void SUM(info *p, info *n)//合并两个顺序表
{
int i, j;
info C;
printf("A和B的合集为:");
for (i = 0; i<p->length; i++)
{
for (j = 0; j<n->length; j++)
{
if (p->a[i] - n->a[j] == 0)
{
C.a[i] = p->a[i];
C.length++;
printf("%d ",C.a[i]);
}
}
}
printf("\n");
}
void change(info *p)//将顺序表中的元素逆置
{
int i, k;
for (i = 0; i<(p->length) / 2; i++)
{
k = p->a[i];
p->a[i] = p->a[p->length - 1 - i];
p->a[p->length - 1 - i] = k;
}
for (i = 0; i < p->length; i++)
{
printf("%d", p->a[i]);
}
}
void swap(info *p, int m)//将顺序表改变顺序后
{
int i, j, n;
for (i = 0; i<p->length; i++)
{
if (p->a[i]<p->a[m] && i>m)
{
n = p->a[i];
for (j = i; j>0; j--)
{
p->a[j] = p->a[j-1];
}p->a[0] = n;
}
}
for (i = 0; i < p->length; i++)
{
printf("%d ", p->a[i]);
}
}
|