实验一线性表的顺序实现:
1、随机生成100个整数存入一个顺序表,整数范围在[100,200)之间,输出表中所有元素;然后去掉其中所有的偶数,输出表中所有元素。
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
typedef int ElementType;
struct SqList{
ElementType *Data;
int N; /* N为表中元素个数 */
int MaxSize; /* 表的最大容量 */
};
struct SqList * CreateList(int M) {
struct SqList * L;
L = (SqList*)malloc(sizeof(struct SqList));
L->Data = (ElementType*)malloc(sizeof(ElementType) * M);
L->N = 0; /* 初始时元素个数为0 */
L->MaxSize = M;
return L;
}
void Insert(struct SqList *L, int i, ElementType X) {
int j;
if (L->N == L->MaxSize){ /* 表空间已满,不能插入*/
printf("List full.\n");
return;
}
if ( i < 1 || i > L->N + 1) { /*检查插入位置的合法性*/
printf("illegal i.\n");
return;
}
for ( j = L->N - 1; j >= i - 1; j -- )
L->Data[j + 1] = L->Data[j]; /* 将 ai~an向后移动一个位置 */
L->Data[i - 1] = X; /* 新元素存进位置i */
L->N ++; /* 表中元素个数+1 */
}
void Delete(struct SqList *L, int i) {
int j;
if(i < 1 || i > L->N) { /* 检查删除位置的合法性 */
printf("illegal i.\n");
return ;
}
for (j = i; j <= L->N - 1; j ++)
L->Data[j - 1] = L->Data[j]; /* 将 ai+1~ an向前移动一个位置 */
L->N --; /* 表中元素个数-1 */
}
void putit(SqList *l){
for(int i=0;i<l->N;i++){
printf("%d ",l->Data[i]);
}
}
int quou(SqList *l){
for(int i=0;i<l->N;i++)
if((l->Data[i])%2==0){
Delete(l,i+1);
i--;
}
}
int main(int argc, char *argv[]) {
int i,x;
SqList *l;
l=CreateList(100);
/*for (i = 0; i < 100; i ++){
Insert(l,i+1,i);
}*/
srand((int)time(NULL)); // 用time函数取当前时间作为随机数初始化种子
for (i = 0; i < 100; i ++)
{
x=rand()%500;
if(x<=200&&x>=100)
Insert(l,i+1,x);
else i--;
}
quou(l);
putit(l);
return 0;
}
2、随机生成20个整数存入一个顺序表,整数范围在(1,200)之间,然后在第一个素数后插入1个0,第二个素数后插入2个0,以此类推,最后输出表中所有元素。
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
typedef int ElementType;
struct SqList{
ElementType *Data;
int N; /* N为表中元素个数 */
int MaxSize; /* 表的最大容量 */
};
struct SqList * CreateList(int M) {
struct SqList * L;
L = (SqList*)malloc(sizeof(struct SqList));
L->Data = (ElementType*)malloc(sizeof(ElementType) * M);
L->N = 0; /* 初始时元素个数为0 */
L->MaxSize = M;
return L;
}
void Insert(struct SqList *L, int i, ElementType X) {
int j;
if (L->N == L->MaxSize){ /* 表空间已满,不能插入*/
printf("List full.\n");
return;
}
if ( i < 1 || i > L->N + 1) { /*检查插入位置的合法性*/
printf("illegal i.\n");
return;
}
for ( j = L->N - 1; j >= i - 1; j -- )
L->Data[j + 1] = L->Data[j]; /* 将 ai~an向后移动一个位置 */
L->Data[i - 1] = X; /* 新元素存进位置i */
L->N ++; /* 表中元素个数+1 */
}
void putit(SqList *l){
for(int i=0;i<l->N;i++){
printf("%d ",l->Data[i]);
}
}
int sushu(int x){
if(x<=0)
return 0;
if(x==1||x==2)
return 1;
for(int i=2;i<x;i++)
if(x%i==0)
return 0;
return 1;
}
void cha0(SqList *l){
int i,j,x=1;
for(i=0;i<l->N;i++){
if(sushu(l->Data[i])==1){
for(j=0;j<x;j++)
Insert(l,i+2,0);
x++;}
}
}
int main(int argc, char *argv[]) {
int i,x;
SqList *l;
l=CreateList(500);
srand((int)time(NULL)); // 用time函数取当前时间作为随机数初始化种子
for (i = 0; i < 20; i ++)
{
x=rand()%500;
if(x<=200&&x>=1)
Insert(l,i+1,x);
else i--;
}
cha0(l);
putit(l);
}