2024.8.5

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct Student
{
    char name[20];
    int chinese;//语文成绩
    int math;
    int english;
    int physical;
    int chemical;
    int biological;
}stu_t;
typedef struct Node
{
    union 
    {
        int len;
        stu_t data;
    };
    struct Node *next;
    
}linklist,*linklistPtr;

//创建头节点
linklistPtr create()
{
    linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
    if(NULL == p)
    {
        printf("创建失败!\n");
        return NULL; //因为定义了指针p,但是p指向的那片空间没申请成功,要避免野指针,所以要指向NULL,所以返回一个NULL。
    }
    printf("创建成功!\n");
    p->len = 0;       //数据段置0
    p->next = NULL;     //指针段指向NULL
    return p;
}
//创建新节点
linklistPtr getnode(stu_t data)
{
        linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
        if(NULL == p)
        {
            printf("内存申请失败");
            return NULL;
        }
        p->data = data;
        p->next = NULL;     //将指针段存放a的地址
        return p;       //返回指针p
}
//头插
int headi(linklistPtr p,stu_t a)
{
    if(NULL == p)
    {
        printf("头插失败!\n");
        return 0;
    }
       linklistPtr p1 = getnode(a);
       p1->next=p->next; // 将头指针的指向 给插入的新节点。
       p->next=p1;      // 再将头指针指向新节点
       p->len++;        // 长度自增
        return 1;
}
int main(int argc, const char* argv[]) {
    FILE* fp = fopen("./stu.txt","w");
    linklistPtr p =create(); //头节点
    stu_t str[5]=
    {
        {"张大",10,100,100,1,100,100},
        {"张二",20,100,100,1,100,100},
        {"张三",30,100,100,1,100,66},
        {"张四",40,100,100,1,100,77},
        {"张五",50,100,100,1,100,88}
    };
    for(int i=0;i<5;i++)
    {   headi(p,str[i]);
    }
    linklistPtr p1 = p;
    for(int i=0;i<p->len;i++)
    {
        p1=p1->next;
        fprintf(fp,"%s %d %d %d %d %d %d\n",p1->data.name,p1->data.chinese,p1->data.math,p1->data.chemical,p1->data.physical,p1->data.biological,p1->data.english);
    }
    fclose(fp);
    return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
typedef struct sockaddr_in addr_in_t;
typedef struct sockaddr addr_t;
typedef struct sockaddr_un addr_un_t;
typedef struct Student
{
    char name[20];
    int chinese;//语文成绩
    int math;
    int english;
    int physical;
    int chemical;
    int biological;
}stu_t;
typedef struct Node
{
    union 
    {
        int len;
        stu_t data;
    };
    struct Node *next;
    
}linklist,*linklistPtr;

//创建头节点
linklistPtr create()
{
    linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
    if(NULL == p)
    {
        printf("创建失败!\n");
        return NULL; //因为定义了指针p,但是p指向的那片空间没申请成功,要避免野指针,所以要指向NULL,所以返回一个NULL。
    }
    
    p->len = 0;       //数据段置0
    p->next = NULL;     //指针段指向NULL
    return p;
}
//创建新节点
linklistPtr getnode(stu_t data)
{
        linklistPtr p = (linklistPtr)malloc(sizeof(linklist));
        if(NULL == p)
        {
            printf("内存申请失败");
            return NULL;
        }
        p->data = data;
        p->next = NULL;     //将指针段存放a的地址
        return p;       //返回指针p
}
//头插
int headi(linklistPtr p,stu_t a)
{
    if(NULL == p)
    {
        printf("头插失败!\n");
        return 0;
    }
       linklistPtr p1 = getnode(a);
       p1->next=p->next; // 将头指针的指向 给插入的新节点。
       p->next=p1;      // 再将头指针指向新节点
       p->len++;        // 长度自增
        return 1;
}
int main(int argc, const char* argv[]) {
    FILE* fp = fopen("./stu.txt","r");
    linklistPtr p =create();   
    linklistPtr p1 = p;
    stu_t arr[5]={0};
    int i=0;
    while(1)
    {
       int ch = fscanf(fp,"%s %d %d %d %d %d %d\n",arr[i].name,&arr[i].chinese,&arr[i].math,&arr[i].chemical,&arr[i].physical,&arr[i].biological,&arr[i].english);
       if(ch == EOF)
       {break;}
       i++;
    }
    for(int i=0;i<5;i++)
    {   headi(p,arr[i]);
    }
    fclose(fp);
    for(int j=0;j<i;j++)
    {   p1=p1->next;
        printf("%s %d %d %d %d %d %d\n",p1->data.name,p1->data.chinese,p1->data.math,p1->data.chemical,p1->data.physical,p1->data.biological,p1->data.english);
        printf("-----------------------------------------------\n");
    }
    return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kali Linux是一个专门为安全评估和渗透测试设计的操作系统,不断更新版本以提供最新的工具和服务。Kali 2024.1的安装过程类似于其他Linux发行版,但包含一些特定的安全软件包。 以下是基本的步骤: 1. **下载ISO镜像**:首先,访问Kali Linux官方网站(https://www.kali.org/downloads/) 下载适合你硬件架构的最新ISO镜像文件。 2. **刻录USB或创建虚拟机**:你可以使用如Rufus(Windows)、Etcher(跨平台)、UNetbootin等工具将ISO映像刻录到USB闪存驱动器,或者在虚拟化平台上(如VirtualBox、VMware等)创建一个新的虚拟机,并选择从ISO启动。 3. **引导安装**:重启电脑并进入BIOS设置,确保优先加载USB或CD/DVD。按照提示引导至安装界面。 4. **开始安装**:选择语言并接受许可协议,然后选择安装类型,通常推荐“高级”选项以便自定义安装。 5. **分区硬盘**:分配硬盘空间给根分区和交换分区,以及根据需要安装的LXDE、GNOME或其他桌面环境。 6. **配置网络**:选择网络连接的方式,如果无线可用,建议配置自动获取IP地址。 7. **用户名和密码设置**:创建管理员账户,设置登录密码。 8. **安装组件**:在安装过程中可以选择安装所需的安全工具包,包括但不限于Metasploit Framework、Nmap、Wireshark等。 9. **启动修复**:完成安装后,首次启动可能会有启动修复程序运行,这是正常现象。 10. **个性化设置**:安装完成后,你可以根据个人喜好调整防火墙、更新源等设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值