数据结构实验教程

/标准C++17/

预备知识

指针的简单应用

#include <iostream>
#include <stdio.h>
#include <malloc.h>

int main()
{
    int x;
    int *q,*p;
    //p default set scanf x value;
    //q is default set for malloc;
    x=10;
    p=&x;
    q=(int *)malloc(100);
    *q=100;
    printf("*p=%d,*q=%d\n",*p,*q);
    free(q);
    return 0;
}

销售排行榜

dingyi.h
#ifndef DINGYI_H
#define DINGYI_H
#define N 8
#endif //DINGYI_H
#include <stdio.h>
#include "dingyi.h"

void printXing(int n)
{
    for(int i=0;i<N;i++)
    {
        printf("*****");
    }
    printf("\n");
}
void input(int a[],int n)
{
    printXing(10);
    printf("请输入%d个人的销售量\n",n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printXing(10);
}
void print(int a[],int n)
{
    // printXing(10);
    printf("%d个人的销售量排行榜如下:\n",n);
    for(int i=0;i<n;i++)
    {
        printf("%3d ",a[i]);
        // printf("\n");
        // printXing(10);
    }
};

void swap(int *x, int *y)
{
    int t;
    t = *x;
    *x = *y;
    *y = t;
}
//sort的作用就是一个一个比较. 8 和 7. 8和6这样一个一个比.
void sort(int a[],int n)
{
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N-1;j++)
        {
            if(a[j]<a[j+1]){swap(&a[j],&a[j+1]);}
        }
    }
}


int main()
{
    int a[N];
    input(a,N);
    sort(a,N);
    print(a,N);
}

选十佳

#include <stdio.h>
#include <conio.h>
#define N 6 //选手编号
#define M 3 //N项成绩

//定义的结构体,结构体里面的变量
typedef struct student
{
    int number;//学号之类的
    char name[12];//姓名
    float score[3];//3项成绩
    float ave;// 平均值

}Student;

void average(Student s[],int i,int m)
{
    //s[]存储一整个数组数据.i对应结构体中的number.m对应结构体中的???
    int j;//对应for循环中的j.
    s[i].ave=0;
    for(j=0;j<m;j++)
    {
        //计算平均成绩
        //s[i].c[j]对应输入的三项成绩
        scanf("%f",&s[i].score[j]);
        s[i].ave=s[i].ave+s[i].score[j];
        //要计算平均值应该是
        // s[i].ave=s[i].ave/m;

    }
}

void input(Student s[],int i,int m)
{
   int n;
    for(n=0;n<i;n++)
    {
        //首先调用scanf用来输入学号和姓名.
        scanf("%d%s",&s[n].number,&s[n].name);
        //后面再调用average函数来进行平均数的计算.在计算之前还会有scanf函数是用来
        average(s,n,m);
    };
};

void print(Student s[],int i)
{
    int n;
    for(n=0;n<i;n++)
    {
        //输出
        printf("%-4d%20s%8.1f%8.1f%8.1f%6.1f\n", s[n].number, s[n].name, s[n].score[0], s[n].score[1], s[n].score[2], s[n].ave);
        //%-4d的意思是左对齐并保留至少 4 个字符宽度。如果输出的数字不足 4 位,会在右侧补空格;如果超过 4 位,则不截断。
        //%20s的意思是右对齐并保留至少 20 个字符宽度。如果字符串不足 20 个字符,会在左侧补空格;如果超过 20 个字符,则不会截断。
        //%8.1f表示保留总宽度为 8 个字符,其中小数点后保留 1 位小数。右对齐,左侧补空格。
        //%6.1f表示保留总宽度为 6 个字符,其中小数点后保留 1 位小鼠。右对齐,左侧补空格。
    }
};

void sort(Student s[],int i)
{
    int n,m;
    Student t;//构造这一个t结构体是因为要交换一整个的数据.
    for(n=0;n<i;n++)//第一层循环控制 前面一个数据
    {
        for(m=0;m<i-n-1;m++)//第二层循环控制 后面一个数据.为什么要-1是因为是从0开始
        {
            if(s[m].ave<s[m+1].ave){t=s[m];s[m]=s[m+1];s[m+1]=t;}//判断前面是否小于后面.条件满足则交换.
        }
    }
};

int main()
{

    Student s[N];

    printf("请输入%d个选手的编号、姓名和%d项成绩:\n",N,M);
    input(s,N,M);

    printf("排序前的结果:\n");
    print(s,N);
    sort(s,N);

    printf("排序后的结果:\n");
    print(s,N);
    printf("前三名结果:\n");
    print(s,3);
    getch();//调用<conio.h>文件头.作用是从stdio流中读字符,即从控制台读取一个字符,但不显示在屏幕上
    return 1;
}
/*测试数据
1 ln 98 97 98
2 ym 95 97 98
3 gjj 98 99 97
4 zyn 95 97 93
5 lx 94 95 96
6 ld 92 93 95
*/

顺序表

我的顺序表

我的电话本-顺序表的应用

顺序表的应用-合并线性表

This article was updated on September 15, 2024