数据结构实验一

实验题目:线性表的顺序存储结构

1.以顺序表表示集合,编制一个能演示执行集合的并,交,差,补运算的程序。

要求
  1. 集合元素限定为小写字母(‘a’-‘z’),输入可能有非法字符,程序应能自动滤去。
  2. 演示程序以用户和计算机对话的方式进行,及在计算机上显示提示信息后,用户在键盘上输入演示程序中规定的运行命令,相应的输入数据和运算结果在其后。
  3. 程序应执行的命令应包括:构造集合,求并交差补集,退出
审题
  1. 实验要求顺序存储结构,意味着数据的存储应该用数组
  2. 实验要求的功能,最好一个个自定义函数去实现
算法思路

声明全集p(‘a’-‘z’),
1.以集合A为例,读入的集合A为int类型,长度27,值都为0的数组,数据由c=getchar()读入,判断c是否在集合内,如果在则让A中对应的数值加1。这样,如果A[i]=0,那么对应的p[i]中的字母未出现过,反之如果A[i]>0,则字母p[i]在A中。
2.简单来说,A[0]=0代表p[0]未出现过,也就是A不包含字母a元素。
3.交集,A[i]和B[i]都大于0,并集,A[i]或B[i]大于0,补集,输出A[i]=0

详细代码(笔者只写在一个主函数中,误)

#include<stdio.h>
#include<string.h>
#define N 27

int main()
{
	char p[N]="abcdefghijklmnopqrstuvwxyz";
	char A[N]={0};
	char B[N]={0};
	char C[N]={0};
	char c;int n=0;int m=0;
	//集合AB的读入 
	printf("输入集合A\n");
	while((c=getchar())!='\n')
	{
		if(c>='a'&&c<='z')
		{
			A[c-'a']++;
		}
	}
	printf("输入集合B\n");
	while((c=getchar())!='\n')
	{
		if(c>='a'&&c<='z')
		{
			B[c-'a']++;
		}
	}
	//A,B输出 
	printf("A:");
	while(m<=27){
		if(A[m]>0)
			printf("%c",p[m]);
			m++;
	}
	printf("\nB:");m=0;
	while(m<=27){
		if(B[m]>0)
			printf("%c",p[m]);
			m++;
	}
	printf("\n");
	//根据n值的不同选择显示 
	while(n!=4)
	{
		m=0;
		printf("1.交");
		printf("\n2.并");
		printf("\n3.补");
		printf("\n4.退出");
		scanf("%d",&n);
		if(n==1)
		{
			while(m<=27){
				if(A[m]>0&&B[m]>0)
					printf("%c",p[m]);
				m++;
			}
			printf("\n");
		}
		else if(n==2)
		{
			while(m<=27){
				if(A[m]>0||B[m]>0)
					printf("%c",p[m]);
				m++;
			}
			printf("\n");
		}
		else if(n==3)
		{
			printf("A的补集:");
			while(m<=27){
				if(A[m]==0)
					printf("%c",p[m]);
				m++;
			}
			m=0;
			printf("B的补集:");
			while(m<=27){
				if(B[m]==0)
					printf("%c",p[m]);
				m++;
			}
		}
		else
			break;
	}
	return 0; 
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值