数据结构的完整程序到底怎么写

数据结构的完整程序到底怎么写,第1张

一定的功能。

2存储不定个数的数值用可变数组存储或链表实现。

一直输入数据,然后当输入一个特定的值后停止输入。

例:

cin>>i;

while(i!=-1)//当输入-1停止输入

{

把数据加入链表或可变数组;

cin>>i;

}

3求N个数的最大公约数相当于先求俩个数的最大公约数,再用这个最大公约数与第三个数求最大公约数,一直求到最后一个数。

可以减少表的空余字段,减少拆表的必要,例如用户集合可以一条记录带有 admin: true 属性,其他不带有这个属性,而在关系数据库中这类带来大量空余字段的属性最好拆表。

PostgreSQL 打开 HStore 扩展后也可以实现这样的结构。

如果觉得 admin: true 的例子太简单,可以考虑下怎么储存 gemspec 的内容并让它可索引。

将整个数组空间初始化成一个链表:

void IntiSpace_SL(SLinkList&space){

//将一维数组space中各分量链成一个备用链表,space[0]cur为头指针

//"0"表示空指针

for(i=0;i<MAXSIZE-1;++i)space[i]cur=i+1;

space[MAXSIZE-1]cur=0;

}//InitSpace_SL

================================================================

基于C语言的数据结构

楼主跟我的C语言程序设计课程要求设计的程序很像,有一点点不同,不过我的程序应该能满足你的要求,代码如下:

#include <stdioh>

#include <conioh>

#include <stringh>

#define N 10

struct student{

char name[20];

int cla;

int point1;

int point2;

int point3;

int sum;

int num;

};

void printf_student(struct student stu[]);

void in_student(struct student stu[]);

void look_student(struct student stu[]);

void main(){

student stu[N];

int choice1;

while(choice1!=5){

printf("请选择您要 *** 作的项目:\n");

printf("1读取数据\n2录入数据\n3分析数据\n4保存数据\n5退出\n");

scanf("%d",&choice1);

switch(choice1){

case 1:

printf_student(stu);

break;

case 2:

in_student(stu);

break;

case 3:

look_student(stu);

break;

}}

}

void printf_student(struct student stu[]){

FILE fout;

int i=0;

int j=0;

fout=fopen("stu1txt","r");

if(fout==NULL){printf("找不到文件");}

else{

while(!feof(fout)){

fscanf(fout,"%s %d %d %d %d",stu[i]name,&stu[i]cla,&stu[i]point1,&stu[i]point2,&stu[i]point3);

i++;

}

printf("已经读取");

printf("\n姓名\t\t班级\t\t成绩1\t\t成绩2\t\t成绩3\n");

for(j=0;j<i;j++){

printf("%s\t\t",stu[j]name);

printf("%d\t\t",stu[j]cla);

printf("%d\t\t",stu[j]point1);

printf("%d\t\t",stu[j]point2);

printf("%d\t\t",stu[j]point3);}

}

fclose(fout);

}

void in_student(struct student stu[]){

FILE fp;

student flag;

char ch[50]={0};

fp=fopen("stu1txt","a+");

int choice=1;

if(fp==0){printf("无法打开文件\n");}

else{

while(choice){

printf("请依次输入姓名,班级,成绩1,成绩2,成绩3\n");

scanf("%s %d %d %d %d",flagname,&flagcla,&flagpoint1,&flagpoint2,&flagpoint3);

sprintf(ch,"%s\t%d\t%d\t%d\t%d",flagname,flagcla,flagpoint1,flagpoint2,flagpoint3);

/fwrite(flagname,20,1,fp);

fwrite("\t",2,sizeof("\t"),fp);

fwrite(&flagcla,sizeof(flagcla),1,fp);

fwrite("\t",sizeof("\t"),1,fp);

fwrite(&flagpoint1,sizeof(flagpoint1),1,fp);

fwrite("\t",2,sizeof("\t"),fp);

fwrite(&flagpoint2,sizeof(flagpoint2),1,fp);

fwrite("\t",2,sizeof("\t"),fp);

fwrite(&flagpoint3,sizeof(flagpoint3),1,fp);/

fwrite(ch,strlen(ch),1,fp);

printf("%s",ch);

printf("若想继续录入,请输入1,若退出,请输入0\n");

scanf("%d",&choice);

}}

fclose(fp);

}

void look_student(struct student stu[]){

FILE fp;

int i=0;

int sum=0;

student flag;

fp=fopen("stu1txt","r");

if(fp==0){printf("无法打开文件\n");}

else{

while(!feof(fp)){

fscanf(fp,"%s %d %d %d %d",stu[i]name,&stu[i]cla,&stu[i]point1,&stu[i]point2,&stu[i]point3);

i++;

}}

for(int j=0;j<i;j++){

sum=stu[j]point1+stu[j]point2+stu[j]point3;

stu[j]sum=sum;

sum=0;

}

int t=0;

for(t=1;t<i;t++){

for(j=0;j<i-t;j++){

if(stu[j]sum<stu[j+1]sum){

strcpy(flagname,stu[j+1]name);

flagcla=stu[j+1]cla;

flagpoint1=stu[j+1]point1;

flagpoint2=stu[j+1]point2;

flagpoint3=stu[j+1]point3;

flagsum=stu[j+1]sum;

strcpy(stu[j+1]name,stu[j]name);

stu[j+1]cla=stu[j]cla;

stu[j+1]point1=stu[j]point1;

stu[j+1]point2=stu[j]point2;

stu[j+1]point3=stu[j]point3;

stu[j+1]sum=stu[j]sum;

strcpy(stu[j]name,flagname);

stu[j]cla=flagcla;

stu[j]point1=flagpoint1;

stu[j]point2=flagpoint2;

stu[j]point3=flagpoint3;

stu[j]sum=flagsum;

}

}

}

for(j=0;j<i;j++){

stu[j]num=j+1;

}

fclose(fp);

FILE creat;

char ch[30]={0};

creat=fopen("stu2txt","w");

for(j=0;j<i;j++){

sprintf(ch,"%s\t%d\t%d\t%d\t%d\t%d\t%d",stu[j]name,stu[j]cla,stu[j]point1,stu[j]point2,stu[j]point3,stu[j]sum,stu[j]num);

fwrite(ch,30,1,creat);

}

printf("姓名\t班级\t成绩1\t成绩2\t成绩3\t总分\t排名\n");

for(j=0;j<i;j++){

printf("%s\t",stu[j]name);

printf("%d\t",stu[j]cla);

printf("%d\t",stu[j]point1);

printf("%d\t",stu[j]point2);

printf("%d\t",stu[j]point3);

printf("%d\t",stu[j]sum);

printf("%d\n",stu[j]num);

}

fclose(creat);

}

注意一下,我创建的文件时stu1txt

//------------插入排序---void InsertSort(SqList &L){//对顺序表L作直接插入排序。 int i,j; for(i=2;i<=Llength;++i) if(LT(Lr[i]key,Lr[i-1]key))//“<”,需将Lr[i]插入有序子表 { Lr[0]=Lr[i];//复制为哨兵 Lr[i]=Lr[i-1]; for(j=i-2;LT(Lr[0]key,Lr[j]key);--j) Lr[j+1]=Lr[j];//记录后移 Lr[j+1]=Lr[0];//插入到正确位置 }}//--------------冒泡排序---void BubbleSort(SqList &L){//Lr是待排序的文件,采用自下向上扫描,对Lr做冒泡排序 int i,j; int exchange; // 交换标志 for(i=1;i<Llength;i++) {// 最多做 n-1 趟排序 exchange=FALSE; // 本趟排序开始前,交换标志应为假 for(j=Llength-1;j>=i;j--) // 对当前无序区 R[in] 自下向上扫描 if(LT(Lr[j+1]key,Lr[j]key)) { // 交换记录 Lr[0]=Lr[j+1]; //Lr[0]不是哨兵,仅做暂存单元 Lr[j+1]=Lr[j]; Lr[j]=Lr[0]; exchange=TRUE; // 发生了交换,故将交换标志置为真 } if(!exchange) // 本趟排序未发生交换,提前终止算法 return; } }//-----------快速排序---int Partition(SqList &L,int low,int high){//交换顺序表L中子表r[lowhigh]的记录,枢轴记录到位,并返回其所在位置,此时 //在它之前(后)的记录均不大(小)于它。 KeyType pivotkey; Lr[0]=Lr[low];//用子表的第一个记录作枢轴记录 pivotkey=Lr[low]key;//枢轴记录关键字 while(low<high) {//从表的两端交替地向中间扫描 while (low<high&&Lr[high]key>=pivotkey) --high; Lr[low]=Lr[high];//将比枢轴记录小的记录移到低端 while (low<high&&Lr[low]key<=pivotkey) ++low; Lr[high]=Lr[low];//将比枢轴记录大的记录移到高端 } Lr[low]=Lr[0];//枢轴记录到位 return low;//返回枢轴位置} void QSort(SqList &L,int low,int high){//对顺序表L中的子序列Lr[lowhigh]进行快速排序 int pivotloc; if(low<high) {//长度大于1 pivotloc=Partition(L,low,high);//将Lr[lowhigh]一分为二 QSort(L,low,pivotloc-1);//对低子表递归排序pivotloc是枢轴位置 QSort(L,pivotloc+1,high);//对高子表递归排序 }} void QuickSort(SqList &L){//对顺序表L作快速排序。 QSort(L,1,Llength);}//----------归并排序---void Merge(RedType SR[],RedType TR[],int i,int m,int n){//将有序的SR[im]和SR[m+1n]归并为有序的TR[in] int j,k; for(j=m+1,k=i;i<=m&&j<=n;++k) {//将SR中记录由小到大地并入TR if LQ(SR[i]key,SR[j]key) TR[k]=SR[i++]; else TR[k]=SR[j++]; } if(i<=m)//TR[kn]=SR[im];将剩余的SR[im]复制到TR while(k<=n&&i<=m) TR[k++]=SR[i++]; if(j<=n)//将剩余的SR[jn]复制到TR while(k<=n&&j<=n) TR[k++]=SR[j++];} void MSort(RedType SR[],RedType TR1[],int s,int t){//将SR[st]归并排序为TR1[st]。 int m; RedType TR2[20]; if(s==t) TR1[t] = SR[s]; else { m=(s+t)/2;//将SR[st]平分为SR[sm]和SR[m+1t] MSort(SR,TR2,s,m);//递归地将SR[sm]归并为有序的TR2[sm] MSort(SR,TR2,m+1,t);//将SR[m+1t]归并为有序的TR2[m+1t] Merge(TR2,TR1,s,m,t);//将TR2[sm]和TR2[m+1t]归并到TR1[st] }} void MergeSort(SqList &L){// 对顺序表L作归并排序。 MSort(Lr, Lr, 1, Llength);}//-----------堆排序---void HeapAdjust(SqList &H,int s,int m){//已知Hr[sm]中记录的关键字除Hr[s]key之外均满足堆的定义, //本函数调整Hr[s]的关键字,使Hr[sm]成为一个大顶堆 //(对其中记录的关键字而言) int j; RedType rc; rc=Hr[s]; for(j=2s;j<=m;j=2) {//沿key较大的孩子结点向下筛选 if(j<m&&Hr[j]key<Hr[j+1]key) ++j;//j为key较大的记录的下标 if(rckey>=Hr[j]key) break;//rc应插入在位置s上 Hr[s]=Hr[j]; s=j; } Hr[s]=rc;//插入} void HeapSort(SqList &H){//对顺序表H进行堆排序。 int i; RedType temp; for(i=Hlength/2;i>0;--i)//把Hr[1Hlength]建成大顶堆 HeapAdjust(H,i,Hlength); for(i=Hlength;i>1;--i) { temp=Hr[i]; Hr[i]=Hr[1]; Hr[1]=temp;//将堆顶记录和当前未经排序子序列Hr[1i]中 //最后一个记录相互交换 HeapAdjust(H,1,i-1);//将Hr[1i-1]重新调整为大顶堆 }} void main(){ SqList S; printf("---------- 五种排序算法 ----------\n"); InitList_Sq(S); printf(" 1简单插入排序\n"); InsertSort(S); Print_Sq(S); printf(" 2冒泡排序\n"); BubbleSort(S); Print_Sq(S); printf(" 3快速排序\n"); QuickSort(S); Print_Sq(S); printf(" 4归并排序\n"); MergeSort(S); Print_Sq(S); printf(" 5堆排序\n"); HeapSort(S); Print_Sq(S);}

#include<stdioh>

int main()

{

int x,count=0;

int a[100],sum=0;

int i;

while(1)

{

printf("请输入一个数字");

scanf("%d",&x);

if(x==0)

{

a[count]=0;

for(i=count;i>=0;i--)

{

sum+=a[i];

printf("%d ",sum);

}

break;

}

else

{

a[count++]=x;

}

}

return 0;

}

依次输入4,5,6,0

结果为 0,6,11,15

这个程序运行的结果和你原来那个是一样的。不信你自己运行一下。

请输入一个数字4

请输入一个数字5

请输入一个数字6

请输入一个数字0

0 6 11 15 请按任意键继续

以上就是关于数据结构的完整程序到底怎么写全部的内容,包括:数据结构的完整程序到底怎么写、急求数据结构题目:简单行编辑程序C语言、一个单简数据结构的程序代码怎样写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9836472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存