数据结构代码c.docx
《数据结构代码c.docx》由会员分享,可在线阅读,更多相关《数据结构代码c.docx(49页珍藏版)》请在冰点文库上搜索。
![数据结构代码c.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/f5dc2e7f-47e9-4597-9a6e-90168b17868a/f5dc2e7f-47e9-4597-9a6e-90168b17868a1.gif)
数据结构代码c
文件的操作:
#include
#include
intmain()
{
FILE*fp,*out,*in,*p;
inti=0,a;
fp=fopen("F:
\\text\\intfile.dat","w");
if(fp==NULL)
{
printf("openthefileerror");
exit(0);
}
while(i<1000)
{
a=rand();
printf("%8d",a);
fprintf(fp,"%8d",a);
i++;
}
printf("\n");
fclose(fp);
in=fopen("F:
\\text\\intfile.dat","r");
if(in==NULL)
{
printf("openthefileerror");
exit(0);
}
while(!
feof(in))
{
fscanf(in,"%8d",&a);
}
fclose(in);
out=fopen("F:
\\text\\intfile.dat","r");
if(out==NULL)
{
printf("openthefileerror");
exit(0);
}
fseek(out,32L,SEEK_SET);
fscanf(out,"%8d",&a);
printf("%8d",a);
fseek(out,72L,SEEK_SET);
fscanf(out,"%8d",&a);
printf("%8d",a);
fseek(out,-40L,SEEK_END);
fscanf(out,"%8d",&a);
printf("%8d",a);
fseek(out,-80L,SEEK_END);
fscanf(out,"%8d",&a);
printf("%8d",a);
system("pause");
fclose(out);
return0;
}
文件操作2:
#include
#include
typedefstruct
{
charname[10];//
charnum[10];//
intsex;
intgrade[3];
}STUDENT;
STUDENTstudinfo[3];
intmain()
{
FILE*in,*fp;
inti,j;
fp=fopen("F:
\\text\\studinfo.dat","wb");
if(fp==NULL)
{
printf("openthefileerror");
exit(0);
}
printf("entertheinformationofstudents:
\n");
for(i=0;i<3;i++)
{
scanf("%s",studinfo[i].name);
scanf("%s",studinfo[i].num);
scanf("%d",&studinfo[i].sex);
for(j=0;j<3;j++)
scanf("%d",&studinfo[i].grade[j]);//
}
fwrite(studinfo,sizeof(STUDENT),3,fp);
fclose(fp);
in=fopen("F:
\\text\\studinfo.dat","rb");
if(in==NULL)
{
printf("openthefileerror");
exit(0);
}
fread(studinfo,sizeof(STUDENT),3,in);//
for(i=0;i<3;i++)
{
printf("%5s%5s",studinfo[i].name,studinfo[i].num);
printf("%3d",studinfo[i].sex);
for(j=0;j<3;j++)
printf("%3d",studinfo[i].grade[j]);
printf("\n");
}
fclose(in);
system("pause");
return0;
}
排序:
#include
#include
#definen1000
typedefstruct
{
intkey;
}rectype;
rectypeR[n+1];
voidBubblesort(rectypeR[])
{
inti,j,swap;
for(i=1;i{
swap=0;
for(j=n;j>i;j--)
{
if(R[j-1].key>R[j].key)
{
R[0]=R[j-1];
R[j-1]=R[j];
R[j]=R[0];
swap=1;
}
}
if(!
swap)break;
}
}
voidInsertsort(rectypeR[])
{
inti,j;
for(i=2;i<=n;i++)
{
if(R[i].key{
R[0]=R[i];
j=i-1;
while(R[0].keyR[j+1]=R[j--];
R[j+1]=R[0];
}
}
}
voidSelectsort(rectypeR[],ints)//对R[1]~R[n]进行简单选择排序
{
inti,j,k;
rectypet;
for(i=1;i{
k=i;
for(j=i+1;j<=n;j++)//选择关键字最小的记录R[k]
{
if(R[i].keyk=j;
}
if(k!
=i)
{t=R[i];
R[i]=R[k];
R[k]=t;
}
}
}
intPartition(rectypeR[],intlow,inthigh)//返回划分后被定位的基准记录的位置
{
rectypepivot=R[low];
while(low{
while(low=pivot.key)
high--;//自右向左扫描,查找第一个关键字大于R[0].key的记录
if(lowR[low++]=R[high];//移动R[high]至R[low]
while(lowlow++;
if(lowR[high--]=R[low];//移动R[low]至R[high]
}
R[low]=pivot;
returnlow;
}
//快速排序
voidQuicksort(rectypeR[],ints,intt)
{
inti;
if(s{
i=Partition(R,s,t);//对R[s]-R[t]进行划分Quicksort(R,s,i-1);//
Quicksort(R,s,i-1);//递归处理左序列
Quicksort(R,i+1,t);//递归处理右序列
}
}
intmain()
{
FILE*fp;
inti=0,a;
fp=fopen("F:
//text//intfile","w");
if(fp==NULL)
{
printf("error");
exit(0);
}
while(i{
a=rand();
printf("%10d",a);
fprintf(fp,"%10d",a);
i++;
}
printf("\n");
fclose(fp);
fp=fopen("F:
//text//intfile","r");
if(fp==NULL)
{
printf("error");
exit(0);
}
for(i=1;i<=n;i++)
{
fscanf(fp,"%10d",&R[i].key);
}
printf("冒泡排序:
\n");
Bubblesort(R);
for(i=1;i<=n;i++)
printf("%10d",R[i].key);
printf("\n");
printf("直接插入排序:
\n");
Insertsort(R);
for(i=1;i<=n;i++)
printf("%10d",R[i].key);
printf("\n");
printf("简单选择排序:
\n");
Selectsort(R,n);
for(i=1;i<=n;i++)
printf("%10d",R[i].key);
printf("\n");
printf("快速排序:
\n");
Quicksort(R,1,n);
for(i=1;i<=n;i++)
printf("%10d",R[i].key);
printf("\n");
fclose(fp);
system("pause");
return0;
}
排序2
#include
#include
#include
typedefstruct
{
charname[10];//
charnum[10];//
intsex;
intgrade[4];
}STUDENT;
STUDENTstudinfo[4];
intmain()
{
FILE*in,*fp;
inti,j;intaver[4];intk,swap;
fp=fopen("F:
\\text\\studinfo.dat","wb");
if(fp==NULL)
{
printf("openthefileerror");
exit(0);
}
printf("entertheinformationofstudents:
\n");
for(i=1;i<=3;i++)
{
scanf("%s",studinfo[i].name);
scanf("%s",studinfo[i].num);
scanf("%d",&studinfo[i].sex);
for(j=1;j<=3;j++)
scanf("%d",&studinfo[i].grade[j]);//
}
fwrite(studinfo,sizeof(STUDENT),3,fp);
fclose(fp);
in=fopen("F:
\\text\\studinfo.dat","rb");
if(in==NULL)
{
printf("openthefileerror");
exit(0);
}
fread(studinfo,sizeof(STUDENT),3,in);//
for(i=1;i<=3;i++)
{
printf("%5s%5s",studinfo[i].name,studinfo[i].num);
printf("%3d",studinfo[i].sex);
for(j=1;j<=3;j++)
printf("%3d",studinfo[i].grade[j]);
printf("\n");
}
for(i=1;i<3;i++)
{
swap=0;
for(j=3;j>i;j--)
{
if(strcmp(studinfo[j-1].num,studinfo[j].num)>0)
{
studinfo[0]=studinfo[j-1];
studinfo[j-1]=studinfo[j];
studinfo[j]=studinfo[0];
swap=1;
}
}
if(!
swap)break;
}
printf("按学号排列后:
\n");
for(i=1;i<=3;i++)
{
printf("%5s%5s",studinfo[i].name,studinfo[i].num);
printf("%5d",studinfo[i].sex);
for(j=1;j<=3;j++)
printf("%5d",studinfo[i].grade[j]);
printf("\n");
}
printf("\n");
for(i=1;i<3;i++)
{
swap=0;
for(j=3;j>i;j--)
{
if(strcmp(studinfo[j-1].name,studinfo[j].name)>0)
{
studinfo[0]=studinfo[j-1];
studinfo[j-1]=studinfo[j];
studinfo[j]=studinfo[0];
swap=1;
}
}
if(!
swap)break;
}
printf("按姓名排序后:
\n");
for(i=1;i<=3;i++)
{
printf("%8s%8s",studinfo[i].name,studinfo[i].num);
printf("%5d",studinfo[i].sex);
for(j=1;j<=3;j++)
printf("%10d",studinfo[i].grade[j]);
printf("\n");
}
printf("\n");
printf("按平均成绩排序后:
\n");
for(i=1;i<=3;i++)
{
aver[i]=(studinfo[i].grade[1]+studinfo[i].grade[2]+studinfo[i].grade[3])/3;
}
for(i=1;i<=2;i++)
{
if(aver[i]{
studinfo[0]=studinfo[i];
studinfo[i]=studinfo[i+1];
studinfo[i+1]=studinfo[0];
}
}
for(i=1;i<=3;i++)
{
printf("%8s%8s",studinfo[i].name,studinfo[i].num);
printf("%10d%10d",studinfo[i].sex,aver[i]);
for(j=1;j<=3;j++)
printf("%10d",studinfo[i].grade[j]);
printf("\n");
}
fclose(in);
system("pause");
return0;
}
括号匹配
#include
#include
#defineMaxsize100
typedefstruct
{
chardata[Maxsize];
inttop;
}SqStack;
SqStack*InitList()
{
SqStack*S=(SqStack*)malloc(sizeof(SqStack));
S->top=0;
returnS;
}
intcorrect(charexp[])
{
charst[Maxsize];
inttop=-1,i=0;
inttag=1;
while(exp[i]!
='\0'&&tag)
{
if(exp[i]=='('||exp[i]=='['||exp[i]=='{')
{
top++;
st[top]=exp[i];
}
if(exp[i]==')')
{
if(st[top]=='(')
top--;
else
tag=0;
}
if(exp[i]==']')
{
if(st[top]=='[')
top--;
else
tag=0;
}
if(exp[i]=='}')
{
if(st[top]=='{')
top--;
else
tag=0;
}
i++;
}
if(top!
=-1)tag=0;
if(tag==0)printf("no");
elseprintf("yes");
}
intmain()
{
SqStack*S;
intcorrect(charexp[]);
charn,exp[Maxsize];
printf("输入表达式:
\n");
gets(exp);
correct(exp);
system("pause");
return0;
}
后缀表示法
#include
#include
#include
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
#defineN100
typedefstruct
{
int*base;
int*top;
intstacksize;
}SqStack;
voidInitStack(SqStack&S){
//构造一个空栈S
S.base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
if(!
S.base)exit(0);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}//InitStack
voidPush(SqStack&S,inte){
//插入元素e为新的栈顶元素
if(S.top-S.base>=S.stacksize)
{
S.base=(int*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(int));
if(!
S.base)exit(0);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
}
voidPop(SqStack&S,int*e){
//若栈不空,则删除S的栈顶元素,用e返回其值
if(S.base==S.top)return;
*e=*--S.top;
}
intmain()
{
chara[N];
charp[N];
inti,j,q;
intc,b,d;
SqStackS;
InitStack(S);
gets(a);
for(i=0;a[i]!
='\0';i++)
{j=0;
while(a[i]!
='')
{
p[j]=a[i];
i++;
j++;
}
if((p[0]!
='+')&&(p[0]!
='-')&&(p[0]!
='*')&&(p[0]!
='/'))
{
q=atoi(p);
Push(S,q);
}
else
{
Pop(S,&c);
Pop(S,&b);
switch(p[0])
{
case'+':
d=b+c;break;
case'-':
d=b-c;break;
case'*':
d=b*c;break;
case'/':
d=b/c;break;
default:
printf("hehe");
}
Push(S,d);
}
memset(p,0,N);
}
Pop(S,&d);
printf("\n答案为:
%d\n",d);
system("pause");
return0;
}
邻接矩阵的深度遍历:
#include
#include
#definen8
#definee10//图的边数
intvisited[n];
typedefintvextype;//顶点的数据结构
typedefintadjtype;//顶点权值数据结构
typedefstruct
{
vextypevex[n];
adjtypearc[n][n];//邻接矩阵
}graph;
graphG;
voidCreateAdjArray(graph*G)//建立无向网络邻接矩阵
{
inti,j,k;
for(i=1;i<=n;i++)
{G->vex[i]=i;}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
G->arc[i][j]=0;
}
}
for(k=1;k<=e;k++)
{
scanf("%d%d",&i,&j);
G->arc[i][j]=1;
}
}
voidDFSTraverse(graph*G,inti)//深度遍历搜索
{
printf("深度优先遍历:
顶点%d\n",G->vex[i]);
visited[i]=1;
for(intj=1;j<=n;j++)
{
if(G->arc[i][j]==1&&visited[j]==0)
DFSTraverse(G,j);
}
}
voidDFSA(graph*G)
{
inti;
for(i=1;i<=n;i++)
visited[i]=0;
for(i=1;i<=n;i++)
if(!
visited[i])
DFSTraverse(G,i);
}//DFSA
intmain()
{
inti;
graph*G=(graph*)malloc(sizeof(graph));
CreateAdjArray(G);
printf("inputgraphG:
\n");
DFSA(