周报

C语言-----单向链表

存储空间的分配与释放

C语言标准库函数提供四个函数,用来实现内存的动态分配与释放。

1. malloc()函数——动态分配一段内存空间

malloc()函数原型:

void*malloc(unsigned int size);

该函数包含在头文件stdlib.h中;
功能:在内存的动态存储区申请一个长度为 size 字节的连续存储空间。malloc()函数会返回一个指针,指向所分配空间的起始地址。如果没有足够的内存空间可分配,则返回空指针NULL。
其参数常使用c语言提供的类型长度运算符sizeof()来计算计算申请空间大小。

2.calloc()函数——动态分配连续内存空间

calloc()函数原型:

void * calloc ( unsigned int n , unsigned int size );

该函数包含在头文件stdlib.h中;

功能:在内存申请n个长度为 size 字节的存储空间,并返回该存储空间的起始地址,如果没有足够的内存空间可分配,则返回空指针NULL。

3.relloc()函数——改变指针指向空间大小

relloc()函数原型:

void *realloc(void *ptr,size_t size);

该函数包含在头文件stdlib.h中;

功能:改变ptr指针指向大小为 size 的空间。返回值是一个新地址的指针,若出现错误,则返回NULL。

4.free()函数——释放内存空间

free()函数原型:

void free(void *p)

功能:将指针变量 p 指向的存储空间释放,交还给系统。free()函数无返回值。p只能是程序最后一次调用malloc()或calloc()函数所返回的地址。

链表的建立

单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个数据域和一个指针域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。
在这里插入图片描述
由于链表的每个结点都包含数据域和指针域,及每个结点都要包含不同的数据,所以结点的数据类型必须是结构体,该类型可包含多个各种类型的成员,其中必须有一个成员的类型是指向本结构体类型的指针类型。如下:

   struct stud
   {
      ...../*数据域*/
      struct stud *next;
   };   

链表的查找

链表的查找操作实在链表中查找某给定值得节点。
定义一个查找函数:

  struct stud *find(struct stud *p)  //形参即为接收链表的头指针
  {
      long num;
      printf("请输入要查找的学号:")
      scanf("%ld",&num);
      while(p->next!=NULL)
        {
            p=p->next;    //指针后移,比较下一结点。
            if(p->num==num)    //找到目标则返回该结点指针p。
            return p;
        }
        return NULL;    //未找到则返回空指针NULL。
  }

链表结点的删除

LinkList Delete_Min(LinkList &L)
  {    
       //L是带头结点的单链表,本算法删除其最小值结点    
       LNode *pre = L, *p=pre->next;  
       //p 为工作指针,pre 指向其前驱    
       LNode *minpre=pre, *minp=p;  //保存最小值结点及其前驱    
       while(p!=NULL)
           {       
            if(p->data<minp->data)
            {            
             minp=p;//找到比之前找到的最小值结点更小的结点
             minpre=pre;                          
            }          
            pre=p;  //继续扫描下一个结点        
            p=p->next;    
          }    
         minpre->next=minp->next;  //删除最小值结点    
         free(minp);
         //free()是C语言中申请内存空间与释放内存空间的函数。
         return L;
 }

web

URL 统一资源定位符 (Uniform Resource Locator)
作用:定位服务器资源在这里插入图片描述

例如:

注;本例中host服务器端口即为HTTP默认端口80(可省略,其他要指明)

C语言习题

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。
输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。
输入样例:
5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:
zhangfeng 10001 258

#include<stdio.h>
struct student
{    
   char num[6];    
   char name[10];    
   int a,b,c;
}ads[10];
int main()
{    
    int n,max=0,k;    
    scanf("%d",&n);    
    for(int i=0;i<n;i++)    
    {        
       scanf("%s %s %d %d %d",ads[i].num,ads[i].name,&ads[i].a,&ads[i].b,&ads[i].c);
       if(max<ads[i].a+ads[i].b+ads[i].c)        
       {            
           max=ads[i].a+ads[i].b+ads[i].c;           
           k=i;        
       }    
   }    
   printf("%s %s %d",ads[k].name,ads[k].num,ads[k].a+ads[k].b+ads[k].c);    
   return 0;
}

结构体复习。。。

我们要求找出具有下列性质数的个数(包含输入的自然数nnn):
先输入一个自然数nnn(n≤1000n \le 1000n≤1000),然后对此自然数按照如下方法进行处理:

不作任何处理;

在它的左边加上一个自然数,但该自然数不能超过原数的一半;

加上数后,继续按此规则进行处理,直到不能再加自然数为止.

输入格式 111个自然数nnn(n≤1000n \le 1000n≤1000)
输出格式 111个整数,表示具有该性质数的个数。
输入输出样例 输入 #1
复制
6
输出 #1
复制
6
说明/提示 满足条件的数为
6,16,26,126,36,136

#include<stdio.h>
int main()
{
    int n,i,f[1010];
    f[0]=f[1]=1;
    scanf("%d",&n);
    for(i=2;i<=n;i++)
    {
        if(i%2==0)
        {
            f[i]=f[i-1]+f[i/2];
        }
        else
        {
            f[i]=f[i-1];
        }
    }
    printf("%d\n",f[n]);
}

这个题对我来说算是难的了,我通过学习题解,才勉强做出来,
首先,不难发现2n与2n+1(n为非负整数)的答案是一样的
这就是第一个规律,然后我们以n=8为例,手动模拟一下
一共有10组解
8
1 8 2 8 3 8 4 8
1 2 8 1 3 8 1 4 8 2 4 8
1 2 4 8
我打出的东西很像一棵搜索树。。。
当我们把8和8下面的左三棵子树放在一起(即8和下面三列),并将所有的8都改成7,我们能发现,我们得到了n=7时的所有解;
我们再把最右端的子树(即剩下的部分)中的所有8删去,我们得到了n=4时的所有解
就这样,我们可以得到一个递推式,
f(n)=f(n-1) //7=8-1

    +f(n/2)                //4=8/2

再结合之前发现的规律
就能得到:
n%20时
f(n)=f(n-1)+f(n/2)
n%2
1时
f(n)=f(n-1)

某蒟蒻迷上了“小书童”,有一天登陆时忘记密码了(他没绑定邮箱or手机),于是便把问题抛给了神犇你。
题目描述 蒟蒻虽然忘记密码,但他还记得密码是由一个字符串组成。密码是由原文字符串(由不超过 50 个小写字母组成)中每个字母向后移动 nnn 位形成的。z 的下一个字母是 a,如此循环。他现在找到了移动前的原文字符串及 nnn,请你求出密码。
输入格式 第一行:n。第二行:未移动前的一串字母
输出格式 一行,是此蒟蒻的密码
输入输出样例 输入 #1
复制
1
qwe 输出 #1
复制
rxf 说明/提示 字符串长度<=50

#include<stdio.h>
#include<string.h>
int main()
{
    char a[50];
    int i,n,t;
    scanf("%d",&n);
    scanf("%s",a);
    for(i=0;i<strlen(a);i++)
    {
       printf("%c",(a[i]-'a'+n)%26+'a');
    }
}

虚拟机搭建

1.下载并安装VMware Workstation Pro
2.
步骤一:点击新建虚拟机–选择自定义模式–下一步

在这里插入图片描述
步骤二:选择兼容性,默认即可。直接下一步

在这里插入图片描述
步骤三:此处选择光驱,这个地方要注意:一定要选择稍后安装操作系统。否则配置完成后,机器将自行安装系统,并把所有磁盘空间分配给C盘选择完成后,进行下一步
在这里插入图片描述
步骤四:选择系统类型,根据镜像来进行选择即可。选择好之后进入下一步
在这里插入图片描述
步骤五:命名虚拟机。命名完成后进行下一步
在这里插入图片描述
步骤六:选择处理器线程数,这个地方也要注意,是根据主机CPU而来的。处理器数量和内核数量可自定义。
在这里插入图片描述
步骤七:内存大小选择,不得超过主机自身内存即可。选择好后进入下一步
在这里插入图片描述
步骤八:选择网络类型。很多人选择NAT直接就可以使用内网网络。但是对于有独立IP的服务器来说,有可能就会出现问题。这里建议大家直接选择,不适用网络连接,配置完成后重头选择。选择完成后进行下一步。
步骤九,下面这些图片都直接进入下一步即可
步骤十:定义磁盘容量大小。这个地方可以随意填写。虚拟机的磁盘为共享磁盘。可以理解为,使用了实际使用了多少,就会占用主机多少磁盘。没有使用到的磁盘,就算定义1T,仍然不会占用太多主机磁盘。定义完成后,直接下一步直到完成

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值