⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 链表维护与文件保存程序实现,主要针对C语言数据结构而实现
💻 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 + -