HJJYJ 2015-10-15 12:43 采纳率: 100%
浏览 1780
已采纳

数据结构预算法 要求统计自己输入文本的数字字母或者文字的个数 把学生独立完成部分填上

#include
#include
#include
#include
#include
#define MAXSIZE 1000
#define MAXLEN 20
#define MAXNUM 16
#define FALSE 0
#define TRUE 1
/*---------------堆结构的定义---------------*/
typedef struct{
char stores[MAXSIZE];
int freep; //当前可用空间开始位置
}HeapSpace;
HeapSpace sp;
/*-------------单词数据类型定义-------------*/
/*-----------单词在堆中的位置描述-----------*/
typedef struct{
int stadr; //单词在对空间中的开始位置
int len; //单词长度
}WordType;
/*----------------单词描述-------------------*/
typedef struct{
char ch[MAXLEN]; //单词字符串
int size; //单词长度
}Sequence;
/*---------------有序表类型定义---------------*/
/*-------------单词有序表结点定义-------------*/
typedef WordType ElemType;
typedef struct NodeType{
ElemType data;
struct NodeType next;
}NodeType,*LinkType;
/
----------------单词有序表定义--------------*/
typedef struct{
LinkType head; //有序表头指针
LinkType tail; //有序表尾指针
int size; //有序表结点个数
}OrderList;
/*---记录一行中匹配成功单词在目标词汇表中的位置---*/
typedef struct{
int eqelem[MAXNUM]; //单词在目标词汇表中的位置
int last; //匹配成功单词的个数
}EqelemList;
/*-----------文件测试相关的数据类型定义-----------*/
/*--------------单词在文件中的位置----------------*/
typedef struct Node{
int elem; //被测单词在文件中的行号
struct Node next;//指向下一个行号结点的指针
}Node,*Link;
/
-----------单词统计分析记录结构定义-------------*/
typedef struct{
WordType data; //被测试的单词
int count; //在文件中出现的次数
Link next; //记录出现的所有行号的脸表头指针
}HeadNode;
/*---------文本文件测试结果记录定义---------------*/
typedef HeadNode ResultType[MAXNUM];
typedef int status;
/*------------与单词相关的函数----------------*/
status NewWord(WordType nw,Sequence cha)
{ int i,k;
if(sp.freep+cha.size>=MAXSIZE)
{ printf("Heap Full!\n");
getchar();
return(0);
}
else{
i=sp.freep;
sp.freep=sp.freep+cha.size;
for(k=0;k sp.stores[i+k]=cha.ch[k];
nw->stadr=i;
nw->len=cha.size;
return(1);
}
}
void CopyWord(WordType *nw,WordType oldw)
{ nw->stadr=oldw.stadr;
nw->len=oldw.len;
}
int WordCmp(WordType wd1,WordType wd2)
{ int k,si,sj;
(学生独立完成)
}
void PrintWord(WordType wd)
{ int i;
for(i=0;i<wd.len;i++)
putchar(sp.stores[wd.stadr+i]);
}
/
---------------与有序表相关的函数-----------*
status MakeNode(LinkType p,ElemType e)
{ *p=(LinkType)malloc(sizeof(NodeType));
if(!(*p)) return(FALSE);
(*p)->data.stadr=e.stadr;
(*p)->data.len=e.len;
(*p)->next=NULL;
return(TRUE);
}
status InitList(OrderList *L)
{ ElemType wd;
wd.len=0;
if(MakeNode(&(L->head),wd))
{ L->tail=L->head;
L->head->next=NULL;
L->size=0;
return(TRUE);
}
else{ L->head=NULL;
return(FALSE);
}
}
void DestroyList(OrderList *L)
{ LinkType p,q;
p=L->head;
while(p){
q=p;p=p->next;
free(q);
}
L->head=L->tail=NULL;
}
status LocateElem(OrderList L,ElemType e,LinkType *q)
{ LinkType pre,p;
(学生独立完成)
}
void InsertAfter(OrderList *L,LinkType q,LinkType s)
{ if(L->head&&q&&s){
s->next=q->next;q->next=s;
if(L->tail==q) L->tail=s;
L->size++;
}
}
void ListCompare(OrderList La,OrderList Lb,EqelemList *s)
{ int pos;
LinkType pa,pb;
if(La.head&&Lb.head){
pa=La.head->next;
pb=Lb.head->next;
s->last=pos=0;
while(pa&&pb){
if(WordCmp(pa->data,pb->data)==0){
s->eqelem[s->last++]=pos++;
pa=pa->next;
pb=pb->next;
}
else if(WordCmp(pa->data,pb->data)==-1){
pa=pa->next;
pos++;
}
else pb=pb->next;
}
}
}
status ListEmpty(OrderList L)
{ if(L.size==0) return(TRUE);
return(FALSE);
}
/
-----------与文本文件有关的函数-------------*/
int feoln(FILE f)
{ char cha;
cha=fgetc(f);
ungetc(cha,f);
if(cha=='\n') return(TRUE);
return(FALSE);
}
void GetAWord(FILE *f,Sequence *st)
{ char ch;
(学生独立完成)
}
status ExtractWord(FILE *f,OrderList *ta)
{ int i;
char lendc;
Sequence str;
WordType nwd;
LinkType p;
LinkType s;
(学生独立完成)
}
status match(FILE *f,OrderList pat,ResultType rs)
{ int i,k,linenum,failed,fsp;
OrderList sa;
EqelemList eqlist;
Link p;
(学生独立完成)
}
status Initialization(FILE **fr)
{ char FileName[30];
printf("Input file name:");
do{ scanf("%s",FileName);
}while(strlen(FileName)==0);
*fr=fopen(FileName,"rb");
if(*fr)
{ printf("file open!\n");
return(TRUE);
}
else { printf("file not open!\n");
return(FALSE);
}
}
void InputWord(OrderList *pt)
{ char cc;
Sequence ws;
LinkType p,q;
WordType nwd;
(学生独立完成)
}
void InitRList(ResultType rs,OrderList pat)
{ int k;
LinkType p;
p=pat.head->next;
for(k=0;k CopyWord(&rs[k].data,p->data);
rs[k].next=NULL;
rs[k].count=0;
p=p->next;
}
}
void OutResult(ResultType rslist,int n)
{ int i,j;
Link p;
for(i=0;i printf("The word ");
PrintWord(rslist[i].data);
printf(" appeared in the file %d times",rslist[i].cou
if(rslist[i].count!=0){
printf(" and on ");
p=rslist[i].next;
for(j=0;j if(j { printf("%d,",p->elem);
p=p->next;
}
else printf("%d\n",p->elem);
}
}
}
void FreeResult(ResultType rs,int n)
{ int i;
Link p,q;
for(i=0;i p=rs[i].next;
while(p){
q=p;
p=p->next;
free(q);
}
rs[i].next=NULL;
rs[i].count=0;
}
}
int nemu()
{ int mun;
printf("\n *
******* Literary research aid *********\n") ;
printf(" %8c1---Input matched words%9c\n",' ','');
printf(" %8c2---Input match file%13c\n",' ','');
printf(" %8c3---Proces file%17c\n",' ','');
printf(" %8c4---Output Result%15c\n",' ','');
printf(" %8c5---Quit%24c\n",' ','');
printf(" *****************************************\n");
printf("%15cSelcet 1,2,3,4,5: ",' ');
do{
mun=getch()-48;
}while(mun5);
printf("\n");
return(mun);
}
/*--------------------------------------------*/
/* 主函数 /
/
--------------------------------------------*/
void main()
{ int i,j,flag1=0,flag2=0,flag3=0;
char str[80];
FILE *fp;
OrderList pt;
LinkType p;
ResultType rs;
sp.freep=0;
pt.size=0;
for(i=0;i<MAXNUM;i++) rs[i].next=NULL;
while(1)
{ switch(nemu())
{
93
case 1: //输入待统计的单词集
if(pt.size!=0) DestroyList(&pt);
InputWord(&pt);
if(!ListEmpty(pt)) flag2=1;
break;
case 2: //初始化文件
if(Initialization(&fp)) flag1=1;
break;
case 3: //统计分析
if(flag1==0||flag2==0)
{ printf("file not processed!\n");
getchar();
break;
}
FreeResult(rs,pt.size);
InitRList(rs,pt);
if(!match(fp,pt,rs))
{ printf("memory overfllow!\n");
getchar();
break;
}
else flag3=1;
break;
case 4: //输出统计结果
if(flag3==0){
printf("not result!\n");
getchar();
break;
}
OutResult(rs,pt.size);
break;
case 5: //退出系统
FreeResult(rs,pt.size);
DestroyList(&pt);
return;
}
}
}

  • 写回答

1条回答 默认 最新

报告相同问题?

悬赏问题

  • ¥15 imageEnView绘图问题
  • ¥15 关于#python#的问题:您好可以加您一下联系方式吗,在复现的时候确实有点问题难以解决
  • ¥15 联想电脑重装系统时无法发现硬盘
  • ¥15 MATLAB与UR10e实体机械臂建立通讯
  • ¥15 c++题需要快一点不用opencv
  • ¥15 关于#java#的问题:想要咨询Flowable流程引擎框架的问题
  • ¥15 vscode里面怎么用plaformio强调串口啊
  • ¥20 针对计算后数据做一致性检验可以用Bland Altman法吗
  • ¥15 win32如何自绘编辑框的背景图片(语言-c++|操作系统-windows)
  • ¥15 微信夜间被转走了1w对,当天手机剪切板里就出现了这个乱码,有铁子可以看看是啥吗可以