📄 kechengshejijihedeyuusuan.cpp
字号:
#include <stdio.h>
#include <windows.h>
void gotoxy(int a,int b)
{
HANDLE hOutput;
COORD loc;
loc.X = a;
loc.Y=b;
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, loc);
}
void clrscr(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home = {0,0};
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
FillConsoleOutputCharacter(hConsoleOut,' ',csbiInfo.dwSize.X * csbiInfo.dwSize.Y,Home,&dummy);
csbiInfo.dwCursorPosition.X = 0;
csbiInfo.dwCursorPosition.Y = 0;
SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition);
}
void clreol(void)
{
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
HANDLE hConsoleOut;
COORD Home,pos;
DWORD dummy;
hConsoleOut = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo);
Home = csbiInfo.dwCursorPosition;
pos.X = 80 - csbiInfo.dwCursorPosition.X;
FillConsoleOutputCharacter(hConsoleOut,' ',pos.X,Home,&dummy);
}
//定义节点
struct Node
{
char data;
Node *next;
};
//定义集合链表
struct SET
{
Node *header,*tailer;
char set[27];
};
//创建三个集合
SET Set1,Set2,Set3;
//命令
char cmd;
//初始化集合
void InitSet()
{
Set1.header=(Node *)malloc(sizeof(Node));
Set1.tailer=Set1.header;
Set1.tailer->next=NULL;
Set2.header=(Node *)malloc(sizeof(Node));
Set2.tailer=Set2.header;
Set2.tailer->next=NULL;
Set3.header=(Node *)malloc(sizeof(Node));
Set3.tailer=Set3.header;
Set3.tailer->next=NULL;
}
//程序初始化
void Init()
{
InitSet();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("******************************************************************************\n");
printf("* MakeSet1-1 MakeSet2-2 Union-u Intersection-i Difference-d Restart-r Quit-q *\n");
printf("******************************************************************************\n");
gotoxy(0,18);
printf("xxxx");
gotoxy(0,18);
printf("******************************************************************************\n");
printf("* Enter a operation code:1,2,u,i,d,r OR q *\n");
//
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_GREEN);
printf("==============================================================================\n");
// SetColor();
printf("* The programe could determine the Union,Intersection and Difference of a Set \n");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_BLUE);
printf("==============================================================================\n");
printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("CopyRight By GongWeijun");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY|FOREGROUND_BLUE);
printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED |
FOREGROUND_GREEN | FOREGROUND_BLUE);
gotoxy(6,8);
printf("Set1:[]");
gotoxy(6,12);
printf("Set2:[]");
}
//数组长度
int Length(char c[])
{
int i=0;
char *p;
p=c;
while(*p!='\0')
{
i++;
p++;
}
return i;
}
//在链表尾添加结点
void Append(Node *p,SET &Set3)
{
Node *s=(Node *)malloc(sizeof(Node));
s->data=p->data;
s->next=NULL;
Set3.tailer->next=s;
Set3.tailer=s;
}
//并集
void Union(SET &Set1,SET &Set2)
{
Node *p1=Set1.header->next;
Node *p2=Set2.header->next;
while(p1&&p2)
{
if(p1->data<=p2->data)
{
Append(p1,Set3);
if(p1->data==p2->data)
p2=p2->next;
p1=p1->next;
}
else
{
Append(p2,Set3);
p2=p2->next;
}
}
while(p1)
{
Append(p1,Set3);
p1=p1->next;
}
while(p2)
{
Append(p2,Set3);
p2=p2->next;
}
}
//交集
void Intersection(SET &Set1,SET &Set2)
{
Node *p1=Set1.header->next;
Node *p2=Set2.header->next;
while(p1&&p2)
{
if(p1->data<p2->data)
p1=p1->next;
else if(p1->data>p2->data)
p2=p2->next;
else
{
Append(p1,Set3);
p1=p1->next;
p2=p2->next;
}
}
}
//差集
void Difference(SET &Set1,SET &Set2)
{
Node *p1=Set1.header->next;
Node *p2=Set2.header->next;
while(p1&&p2)
{
if(p1->data<p2->data)
{
Append(p1,Set3);
p1=p1->next;
}
else if(p1->data>p2->data)
p2=p2->next;
else
{
p1=p1->next;
p2=p2->next;
}
}
while(p1)
{
Append(p1,Set3);
p1=p1->next;
}
}
//打印集合
void PrintSet(SET &Set)
{
printf("[");
Node *p=Set.header->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("]");
}
//销毁集合
void DestroySet(SET &Set)
{
Node *p=Set.header->next;
Node *q;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
//free(p);
Set.tailer=Set.header;
Set.tailer->next=NULL;
}
//创建集合
void CreatSet(SET &Set)
{
int i=0;
for(i=0;i<=Length(Set.set);i++)
{
if(Set.set[i]>='a'&&Set.set[i]<='z')
{
Node *p=(Node *)malloc(sizeof(Node));
p->data=Set.set[i];
p->next=NULL;
Set.tailer->next=p;
Set.tailer=p;
}
}//创建集合链表,清除非法字符
Node *q=Set.header->next;
while(q!=NULL)
{
Node *w=q->next;
Node *t=q;
while(w!=NULL)
{
if(q->data==w->data)
{
t->next=w->next;
free(w);
w=t->next;
}
else
{
t=w;
w=w->next;
}
}
Set.tailer=t;
q=q->next;
}//清除相同的字符
int flag=1;
while(flag!=0&&Set.header!=Set.tailer)
{
Node *p=Set.header->next;
Node *bp=Set.header;
flag=0;
while(p!=Set.tailer)
{
if(p->data>p->next->data)
{
bp->next=p->next;
bp=bp->next;
p->next=p->next->next;
bp->next=p;
flag++;
}
else
{
bp=p;
p=p->next;
}
if(bp==Set.tailer)
Set.tailer=p;
}
}//字符排序
}
//执行命令
void Interpret(char cmd)
{
switch(cmd)
{
case '1'://创建集合1
gotoxy(0,19);
clreol();
printf("*Please input the elements of the first set:");
fflush(stdin);
gets(Set1.set);
CreatSet(Set1);
gotoxy(11,8);
PrintSet(Set1);
break;
case '2'://创建集合2
gotoxy(0,19);
clreol();
printf("*Please input the elements of the second set:");
fflush(stdin);
gets(Set2.set);
CreatSet(Set2);
gotoxy(11,12);
PrintSet(Set2);
break;
case 'u':
case 'U'://并集
gotoxy(0,19);
printf("* Enter a operation code:1,2,u,i,d,r OR q *\n");
Union(Set1,Set2);
gotoxy(6,15);
clreol();
printf("Union:");
PrintSet(Set3);
DestroySet(Set3);
break;
case 'i':
case 'I'://交集
gotoxy(0,19);
printf("* Enter a operation code:1,2,u,i,d,r OR q *\n");
Intersection(Set1,Set2);
gotoxy(6,15);
clreol();
printf("Intersection:");
PrintSet(Set3);
DestroySet(Set3);
break;
case 'd':
case 'D'://差集
gotoxy(0,19);
printf("* Enter a operation code:1,2,u,i,d,r OR q *\n");
Difference(Set1,Set2);
gotoxy(6,15);
clreol();
printf("Difference:");
PrintSet(Set3);
DestroySet(Set3);
break;
case 'r':
case 'R'://重新开始
clrscr();
DestroySet(Set1);
DestroySet(Set2);
DestroySet(Set3);
Init();
break;
}
}
//读入命令
char ReadCommand(char cmd)
{
gotoxy(6,4);
printf("Operation:");
do
{
fflush(stdin);
scanf("%c",&cmd);
}while(!(cmd=='1'||'2'||'u'||'U'||'i'||'I'||'d'||'D'||'q'||'Q'||'r'||'R'));
return cmd;
}
//显示开始界面
void BeginShow()
{
gotoxy(25,6);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED);
printf("Welcome To Use My Promgrame!");
gotoxy(0,23);
printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
printf("CopyRight By GongWeijun");
printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11");
Sleep(2000);
clrscr();
}
//显示结束界面
void EndShow()
{
clrscr();
gotoxy(30,6);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),
FOREGROUND_INTENSITY | FOREGROUND_RED);
printf("Thanks For Use!\n");
gotoxy(0,23);
printf(">>>>>>>>>>>>>>>>>>>>>>>>>");
printf("CopyRight By GongWeijun");
printf("<<<<<<<<<<<<<<<<<<<<<<<<08.11\n");
Sleep(2000);
}
void main()
{
BeginShow();
Init();
char command;
do
{
command=ReadCommand(cmd);
Interpret(command);
}while(command!='q'&&cmd!='Q');
EndShow();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -