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 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示