📄 common.h
字号:
#include<common1.h>
typedef struct DPNode1 { // 字符节点类型和指针类型
char ch[10];
int item[10];
struct DPNode1 *next;
}DPNode1,*Linklist1;
typedef struct DPNode2 { // 数值节点类型和指针类型
int num;
int item[10];
struct DPNode2 *next;
}DPNode2,*Linklist2;
typedef struct { // 字符型倒排表
Linklist1 head,tail;
int size;
int curpos;
Linklist1 current;
}DPlist1;
typedef struct { // 数值型倒排表
Linklist2 head,tail;
int size;
int curpos;
Linklist2 current;
}DPlist2;
int InitDPList1(DPlist1 &L) {
// 初始化字符型倒排表
int i=0;
L.head=new DPNode1;
if (!L.head) return FALSE;
for (i=0;i<=9;i++) {
L.head->ch[i]='\0';
L.head->item[i]=0;
}
L.head->next=NULL;
L.current=L.tail=L.head;
L.curpos=L.size=0;
return TRUE;
} // InitDPList1
int InitDPList2(DPlist2 &L) {
// 初始化数值型倒排表
int i=0;
L.head=new DPNode2;
if (!L.head) return FALSE;
L.head->num=0;
for (i=0;i<=9;i++) L.head->item[i]=0;
L.head->next=NULL;
L.current=L.tail=L.head;
L.curpos=L.size=0;
return TRUE;
} // InitDPList2
void CreatDP1(Orderlist La,DPlist1 &Lb) {
// 电器种类
int i=0,n=0,m=0,k=0,j=0; // item[i]
Linklist q;
q=new LNode;
q=La.head->next; // 有序链表节点
Linklist1 p,t;
p=new DPNode1;
p=Lb.head; // 倒排表字符节点
while (La.size>0) {
i=0;
m=La.size;
t=new DPNode1; // 过渡节点
q=La.head->next;
strcpy(t->ch,q->elecname);
for (n=1;n<=m;n++) {
for (k=0;k<=9;k++) {
if (t->ch[k]==q->elecname[k]) j=1;
else {
j=0;
break;
} // end_else
} // end_for
if (j==1) {
t->item[i]=q->recnum;
i++;
DeleteList2(La,q->recnum);
q=q->next;
} //end_ if
else q=q->next
} //end_for
while(i<10) {
t->item[i]=0;
i++;
} //end_while
p->next=t;
p=p->next;
Lb.size++;
} //end_while
Lb.tail=t;Lb.tail->next=NULL;
Lb.current=Lb.head->next;
} //CreatDP1
void CreatDP2(Orderlist La,DPlist1 &Lb) {
// 品牌名称
int i=0,n=0,m=0,k=0,j=0; // item[i]
Linklist q;
q=new LNode;
q=La.head->next; // 有序链表节点
Linklist1 p,t;
p=new DPNode1;
p=Lb.head; // 倒排表字符节点
while (La.size>0) {
i=0;
m=La.size;
t=new DPNode1; // 过渡节点
q=La.head->next;
strcpy(t->ch,q->brand);
for (n=1;n<=m;n++) {
for (k=0;k<=9;k++) {
if (t->ch[k]==q->brand[k]) j=1;
else {
j=0;
break;
}
}
if (j==1) {
t->item[i]=q->recnum;
i++;
DeleteList2(La,q->recnum);
q=q->next;
} //end_ if
else q=q->next
} //end_for
while(i<10) {
t->item[i]=0;
i++;
}
p->next=t;p=p->next;
Lb.size++;
} //end_while
Lb.tail=t;
Lb.tail->next=NULL;
Lb.current=Lb.head->next;
} //CreatDP2
void CreatDP3(Orderlist La,DPlist2 &Lb) {
// 产品价格
int i=0,n=0,m=0; // item[i]
Linklist q;
q=new LNode;
q=La.head->next; // 有序链表节点
Linklist2 p,t;
p=new DPNode2;
p=Lb.head; // 倒排表数值节点
while (La.size>0) {
i=0;
m=La.size;
t=new DPNode2; // 过渡节点
q=La.head->next;
t->num=q->price;
for (n=1;n<=m;n++) {
if (t->num==q->price) {
t->item[i]=q->recnum;
i++;
DeleteList2(La,q->recnum);
q=q->next;
} //end_ if
else q=q->next
} //end_for
while(i<10) {
t->item[i]=0;
i++;
}
p->next=t;p=p->next;
Lb.size++;
} //end_while
Lb.tail=t;
Lb.tail->next=NULL;
Lb.current=Lb.head->next;
} //CreatDP3
void CreatDP4(Orderlist La,DPlist2 &Lb) {
// 产品价格
int i=0,n=0,m=0; // item[i]
Linklist q;
q=new LNode;
q=La.head->next; // 有序链表节点
Linklist2 p,t;
p=new DPNode2;
p=Lb.head; // 倒排表数值节点
while (La.size>0) {
i=0;
m=La.size;
t=new DPNode2; // 过渡节点
q=La.head->next;
t->num=q->number;
for (n=1;n<=m;n++) {
if (t->num==q->number) {
t->item[i]=q->recnum;
i++;
DeleteList2(La,q->recnum);
q=q->next;
} //end_ if
else q=q->next
} //end_for
while(i<10) {
t->item[i]=0;
i++;
}
p->next=t;
p=p->next;
Lb.size++;
}//end_while
Lb.tail=t;
Lb.tail->next=NULL;
Lb.current=Lb.head->next;
} //CreatDP4
void SaveDP1(DPlist1 L) {
FILE *fp;
Linklist1 p;
p=new DPNode1;
if ((fp=fopen("dplist1","wb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
putw(L.size,fp);
for(p=L.head->next;p!=NULL;p=p->next)
if(fwrite(p,sizeof(struct DPNode1),1,fp)!=1) printf("File write error!\n");
fclose(fp);
} //SaveDP1
void SaveDP2(DPlist1 L) {
FILE *fp;
Linklist1 p;
p=new DPNode1;
if ((fp=fopen("dplist2","wb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
putw(L.size,fp);
for(p=L.head->next;p!=NULL;p=p->next) {
if(fwrite(p,sizeof(struct DPNode1),1,fp)!=1)
printf("File write error!\n");
} //end_for
fclose(fp);
}//SaveDP2
void SaveDP3(DPlist2 L) {
FILE *fp;
Linklist2 p;
p=new DPNode2;
if ((fp=fopen("dplist3","wb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
putw(L.size,fp);
for(p=L.head->next;p!=NULL;p=p->next)
if(fwrite(p,sizeof(struct DPNode2),1,fp)!=1) printf("File write error!\n");
fclose(fp);
}//SaveDP3
void SaveDP4(DPlist2 L) {
FILE *fp;
Linklist2 p;
p=new DPNode2;
if ((fp=fopen("dplist4","wb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
putw(L.size,fp);
for(p=L.head->next;p!=NULL;p=p->next)
if(fwrite(p,sizeof(struct DPNode2),1,fp)!=1) printf("File write error!\n");
fclose(fp);
}//SaveDP4
void OpenDP1(DPlist1 &L) {
int i;
FILE *fp;
Linklist1 p;
if ((fp=fopen("dplist1","rb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
i=getw(fp);
do{
p=new DPNode1;
fread(p,sizeof(struct DPNode1),1,fp);
L.size=L.size+1;
if (L.size==1) L.head->next=p;
else L.current->next=p;
L.current=p;
}while (L.size<i);
L.tail=p;
L.tail->next=NULL;
L.current=L.head->next;
} //OpenDP1
void OpenDP2(DPlist1 &L) {
int i;
FILE *fp;
Linklist1 p;
if ((fp=fopen("dplist2","rb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
i=getw(fp);
do{
p=new DPNode1;
fread(p,sizeof(struct DPNode1),1,fp);
L.size=L.size+1;
if (L.size==1) L.head->next=p;
else L.current->next=p;
L.current=p;
}while (L.size<i);
L.tail=p;
L.tail->next=NULL;
L.current=L.head->next;
}//OpenDP2
void OpenDP3(DPlist2 &L)
int i;
FILE *fp;
Linklist2 p;
if ((fp=fopen("dplist3","rb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
i=getw(fp);
do{
p=new DPNode2;
fread(p,sizeof(struct DPNode2),1,fp);
L.size=L.size+1;
if (L.size==1) L.head->next=p;
else L.current->next=p;
L.current=p;
}while (L.size<i);
L.tail=p;
L.tail->next=NULL;
L.current=L.head->next;
}//OpenDP3
void OpenDP4(DPlist2 &L) {
int i;
FILE *fp;
Linklist2 p;
if ((fp=fopen("dplist4","rb"))==NULL) {
printf("Cannot open file!\n");
return;
} //end_if
i=getw(fp);
do{
p=new DPNode2;
fread(p,sizeof(struct DPNode2),1,fp);
L.size=L.size+1;
if (L.size==1) L.head->next=p;
else L.current->next=p;
L.current=p;
}while (L.size<i);
L.tail=p;
L.tail->next=NULL;
L.current=L.head->next;
}//OpenDP4
void TraverseDPL1(DPlist1 L) {
// 遍历倒排表字符节点
int i=0;
Linklist1 j;
j=new DPNode1;
j=L.head->next;
printf("倒排项目 记录号\n");
while (j!=NULL) {
printf(" %-10s",j->ch);
for (i=0;j->item[i]!=0;i++) printf("%d ",j->item[i]);
printf("\n");
j=j->next;
} //end_while
} //TraverseDPL1
void TraverseDPL2(DPlist2 L) {
// 遍历倒排表数值节点
int i=0;
Linklist2 j;
j=new DPNode2;
j=L.head->next;
printf("倒排项目 记录号\n");
while (j!=NULL) {
printf(" %-10d",j->num);
for (i=0;j->item[i]!=0;i++) printf("%d ",j->item[i]);
printf("\n");
j=j->next;
} //end_while
} //TraverseDPL2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -