Code/Resource
Windows Develop
Linux-Unix program
Internet-Socket-Network
Web Server
Browser Client
Ftp Server
Ftp Client
Browser Plugins
Proxy Server
Email Server
Email Client
WEB Mail
Firewall-Security
Telnet Server
Telnet Client
ICQ-IM-Chat
Search Engine
Sniffer Package capture
Remote Control
xml-soap-webservice
P2P
WEB(ASP,PHP,...)
TCP/IP Stack
SNMP
Grid Computing
SilverLight
DNS
Cluster Service
Network Security
Communication-Mobile
Game Program
Editor
Multimedia program
Graph program
Compiler program
Compress-Decompress algrithms
Crypt_Decrypt algrithms
Mathimatics-Numerical algorithms
MultiLanguage
Disk/Storage
Java Develop
assembly language
Applications
Other systems
Database system
Embeded-SCM Develop
FlashMX/Flex
source in ebook
Delphi VCL
OS Develop
MiddleWare
MPI
MacOS develop
LabView
ELanguage
Software/Tools
E-Books
Artical/Document
classify.c
Package: C语言精彩编程百例_源代码.rar [view]
Upload User: bjtelijie
Upload Date: 2010-01-01
Package Size: 87k
Code Size: 9k
Category:
Algorithm
Development Platform:
Visual C++
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct SUBLINK
- {
- int index;
- struct SUBLINK *next;
- }sublink;
- struct NODE
- {
- char feature[20];
- int upnnum;
- struct SUBLINK *upnode;
- int fullfill;
- int type;
- int state;
- int sonnum;
- struct SUBLINK *sonnode;
- }node;
- #define MAXNUM 1000
- struct NODE *nodelink[MAXNUM];
- int nodenum;
- void initiate();
- void quarry();
- void modify();
- int extend(struct NODE *ntx);
- int showfault() ;
- void store();
- void main()
- {
- int flag;
- initiate();
- for(;;)
- {
- printf("nt请选择操作:nnt1、查询;nnt2、添加新知识;nnt3、退出程序.nnt");
- scanf("%d",&flag);
- switch(flag)
- {
- case 1:
- quarry();
- break;
- case 2:
- modify();
- break;
- case 3:
- store();
- default:
- printf("n输入错误,请重新输入n");
- }
- }
- }
- void initiate()//初始化
- {
- int i , j;
- char s[10];
- FILE *kf;
- struct NODE *newnode;
- struct SUBLINK *newlink , *oldlink;
- if((kf = fopen("knowledgestore.txt" , "r")) == NULL)
- {
- printf("Cannot create/open file");
- exit(1);
- }
- fscanf(kf , "%5d" , &nodenum);
- for(i=0 ; i < nodenum ; i++)
- {
- newnode = (struct NODE*)malloc (sizeof(node));
- if(newnode == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- fscanf(kf , "%20s" , newnode->feature);
- fscanf(kf , "%5d" , &newnode->upnnum);
- for(j=0 ; j<newnode->upnnum ; j++)
- {
- newlink = (struct SUBLINK*) malloc (sizeof(sublink));
- if(newlink == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- fscanf(kf , "%5d" , &newlink->index);
- if(j == 0)
- newnode->upnode = oldlink = newlink;
- newlink->next = NULL;
- oldlink->next = newlink;
- oldlink = newlink;
- }
- newnode->fullfill = 0;
- newnode->state = 0;
- fscanf(kf , "%5d" , &newnode->type);
- fscanf(kf , "%5d" , &newnode->sonnum);
- for(j=0 ; j < newnode->sonnum ; j++)
- {
- newlink = (struct SUBLINK*)malloc(sizeof(sublink));
- if(newlink == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- fscanf(kf , "%5d" , &newlink->index);
- if(j == 0)
- newnode->sonnode = oldlink = newlink;
- newlink->next = NULL;
- oldlink->next = newlink;
- oldlink = newlink;
- }
- nodelink[i] = newnode;
- }
- fscanf(kf , "%10s" , s);
- if(strcmp(s , "end") != 0)
- {
- printf("n程序初始化失败!");
- exit(0);
- }
- }
- void quarry()
- {
- struct NODE *ntx;
- char feature[100];
- int i , flag;
- for(;;)
- {
- flag = 0;
- printf("n请输入动物的特征:");
- scanf("%s" , feature);
- for(i = 0 ; i < nodenum ; i++)
- {
- ntx = nodelink[i];
- if(strstr(feature,ntx->feature) != NULL)
- {
- ntx->state = 1;
- flag = extend(ntx);
- }
- }
- if(flag >= 1)
- {
- for(i = 0 ; i < nodenum ; i++)
- {
- nodelink[i]->fullfill = 0;
- nodelink[i]->state = 0;
- }
- break;
- }
- if(flag == 0)
- if(showfault() == 0)break;
- }
- }
- int extend(struct NODE *ntx)
- {
- int i , index;
- int flag;
- struct NODE *nextone;
- struct SUBLINK *son;
- if(ntx->sonnum == 0)
- {
- printf("n结果为%20sn" , ntx->feature);
- return 1;
- }
- son = ntx->sonnode;
- flag = 0;
- for(i = 0 ; i < (ntx->sonnum) ; i++)
- {
- index = son->index;
- nextone = nodelink[index];
- if(nextone->type == 0)//或节点
- {
- if(nextone->state != 1)
- {
- nextone->state = 1;
- printf("n表明具有%20s特征" , nextone->feature);
- flag += extend(nextone);
- }
- }
- else
- {
- nextone->fullfill++;
- if(nextone->fullfill == nextone->upnnum)
- {
- nextone->state = 1;
- printf("n表明具有%20s特征" , nextone->feature);
- flag =+ extend(nextone);
- }
- }
- son = son->next;
- }
- return flag;
- }
- void modify()
- {
- int i ;
- char choice , feature[100];
- struct NODE *ntx , *newnode;
- struct SUBLINK *endl , *newl;
- newnode = (struct NODE*)malloc(sizeof(node));
- if(newnode == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- newnode->sonnum = 0;
- newnode->upnnum = 0;
- newnode->fullfill = 0;
- printf("n请输入新特征n");
- scanf("%s",newnode->feature);
- printf("新特征类型:n与节点(1),或节点(0)");
- scanf("%d" , &newnode->type);
- newnode->state = 0;
- newnode->fullfill = 0;
- for(;;)
- {
- printf("n是否为叶节点?(Y/N)n");
- scanf("%s" , &choice);
- choice = toupper(choice);
- if(choice == 'N')
- {
- printf("n请输入新特征描述的对象n");
- scanf("%s" , feature);
- for(i = 0 ; i < nodenum ; i++)
- {
- ntx = nodelink[i];
- if(strstr(feature,ntx->feature) != NULL)
- {
- newl = (struct SUBLINK*) malloc (sizeof(sublink));
- if(newl == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- if(newnode->sonnum == 0)
- newnode->sonnode = endl = newl;
- newl->index = i;
- endl->next = newl;
- endl = newl;
- newl->next = NULL;
- newnode->sonnum++;
- /////////////////////////////////将信息写入子节点
- newl = (struct SUBLINK*) malloc (sizeof(sublink));
- if(newl == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- if(ntx->upnnum == 0)
- ntx->upnode = endl = newl;
- newl->index = nodenum;
- newl->next = ntx->upnode;
- ntx->upnode = newl;
- ntx->upnnum++;
- }
- }
- break;
- }
- if(choice == 'Y')break;
- }
- for(;;)
- {
- printf("n是否为顶点?(Y/N)n");
- scanf("%s" , &choice);
- choice = toupper(choice);
- if(choice == 'N')
- {
- printf("n请输入对新对象的描述n");
- scanf("%s" , feature);
- for(i = 0 ; i < nodenum ; i++)
- {
- ntx = nodelink[i];
- if(strstr(feature , ntx->feature)!=NULL)
- {
- newl = (struct SUBLINK*) malloc (sizeof(sublink));
- if(newl == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- if(newnode->upnnum == 0)
- newnode->upnode = endl = newl;
- newl->index = i;
- endl->next = newl;
- endl = newl;
- newl->next = NULL;
- newnode->upnnum++;
- ///////////////////////////////将信息写入父节点
- newl = (struct SUBLINK*) malloc (sizeof(sublink));
- if(newl == NULL)
- {
- printf("n内存不够!n");
- exit(0);
- }
- if(ntx->sonnum == 0)
- ntx->sonnode = endl = newl;
- newl->index = nodenum;
- newl->next = ntx->sonnode;
- ntx->sonnode = newl;
- ntx->sonnum++;
- }
- }
- break;
- }
- if(choice == 'Y')break;
- }
- nodelink[nodenum] = newnode;
- nodenum++;
- }
- void store()
- {
- int i , j;
- char s[10];
- FILE *kf;
- struct NODE *writenode;
- struct SUBLINK *newlink , *oldlink;
- if((kf = fopen("knowledgestore.txt" , "w")) == NULL)
- {
- printf("Cannot create/open file");
- exit(1);
- }
- fprintf(kf , "%5d" , nodenum);
- for(i = 0 ; i < nodenum ; i++)
- {
- writenode = nodelink[i];
- fprintf(kf , "%20s" , writenode->feature);
- fprintf(kf , "%5d" , writenode->upnnum);
- newlink = writenode->upnode;
- for(j = 0 ; j < writenode->upnnum ; j++)
- {
- fprintf(kf , "%5d" , newlink->index);
- oldlink = newlink;
- newlink = newlink->next;
- free(oldlink);
- }
- fprintf(kf , "%5d" , writenode->type);
- fprintf(kf , "%5d" , writenode->sonnum);
- newlink = writenode->sonnode;
- for(j = 0 ; j < writenode->sonnum ; j++)
- {
- fprintf(kf , "%5d" , newlink->index);
- oldlink = newlink;
- newlink = newlink->next;
- free(oldlink);
- }
- free(writenode);
- }
- strcpy(s , "end");
- fprintf(kf , "%10s" , s);
- fclose(kf);
- exit(0);
- }
- int showfault()
- {
- char choice;
- for(;;)
- {
- printf("是否继续?(Y/N)n");
- scanf("%s" , &choice);
- while(choice == '10');
- choice = toupper(choice);
- if(choice == 'Y')return 1;
- if(choice == 'N')exit(0);
- }
- }