当前位置: 首页 > news >正文

数据结构C语言--基础实验

实验1 线性表的顺序实现

1.!顺序表的倒置

/**********************************/
/*文件名称:lab1-01.c             */
/**********************************/
/*基于sequlist.h中定义的顺序表,编写算法函数reverse(sequence_list *L),实现顺序表的就地倒置。*/
#include "sequlist.h"
/*请将本函数补充完整,并进行测试*/
void reverse(sequence_list *L)
{int i,j;datatype x;i=0;j=L->size-1;while (i<j){x=L->a[i];L->a[i]=L->a[j];L->a[j]=x;i++;j--;}
}int main()
{sequence_list L;		/*定义顺序表*/input(&L);	        		/*输入测试用例*/print(&L);                  /*输出原表*/reverse(&L);print(&L);                  /*输出新表*/
}

2.分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中

/**********************************/
/*文件名称:lab1_02.c             */
/**********************************//*编写一个算法函数void sprit( sequence_list *L1,sequence_list *L2,sequence_list *L3),
将顺序表L1中的数据进行分类,奇数存放到存到顺序表L2中,偶数存到顺序表L3中,编写main()进行测试。
*/#include "sequlist.h"
/*请将本函数补充完整,并进行测试*/
void sprit(sequence_list *L1,sequence_list *L2,sequence_list *L3)
{int i,j,k;i=j=k=0;for (i=0;i<L1->size;i++){if (L1->a[i]%2==1)L2->a[j++]=L1->a[i];elseL3->a[k++]=L1->a[i];}L2->size=j;L3->size=k;
}
int main()
{   sequence_list L1,L2,L3;		/*定义三个顺序表*/input(&L1);				    /*输入L1*/sprit(&L1,&L2,&L3);		    /*对L1进行分类*/print(&L1);				    /*输出L1、L2和L3*/print(&L2);print(&L3);
}

3.!将L1与L2中的数据合并到L3中,使数据在L3中按升序排列

/*已知顺序表L1,L2中数据由小到大有序,请用尽可能快的方法将L1与L2中的数据合并到L3中,使数据在L3中按升序排列。*/#include "sequlist.h"
/*请将本函数补充完整,并进行测试*/
void merge(sequence_list *L1,sequence_list *L2,sequence_list *L3)
{int i,j,k;i=j=k=0;while (i<L1->size && j<L2->size ){if (L1->a[i]<L2->a[j])L3->a[k++]=L1->a[i++];elseL3->a[k++]=L2->a[j++];}while (i<L1->size)L3->a[k++]=L1->a[i++];while (j<L2->size)L3->a[k++]=L2->a[j++];L3->size=k;}
int main()
{sequence_list L1,L2,L3;input(&L1);				/*输入时请输入有序数据*/input(&L2);				/*输入时请输入有序数据*/merge(&L1,&L2,&L3);		/*合并数据到L3*/print(&L3);				/*输出L3*/
}

4.!实现求顺序表la与lb的交集存放到顺序表lc中

/*假设顺序表la与lb分别存放两个整数集合,函数inter(seqlist *la,seqlist *lb,seqlist *lc)
的功能是实现求顺序表la与lb的交集存放到顺序表lc中,请将函数补充完整.  */
/**********************************/
/*文件名称:lab1_04.c                 */
/**********************************/
#include "sequlist.h"
/*请将本函数补充完整,并进行测试*/
void  inter(sequence_list *la,sequence_list *lb,sequence_list *lc)
{int i,j,k;k=0;for (i=0; i<la->size; i++){j=0;while (j<lb->size  &&  la->a[i]!=lb->a[j])j++;if (j<lb->size)lc->a[k++]=la->a[i];}lc->size=k;
}
int main()
{sequence_list la,lb,lc;inputfromfile(&la,"1.txt"); 		/*从文件1.txt建立顺序表*/inputfromfile(&lb,"2.txt");		/*从文件2.txt建立顺序表*/print(&la); 				 	    /*输出la*/print(&lb);  				        /*输出lb*/inter(&la,&lb,&lc);   		/*求la与lb的交集存于lc中*/print(&lc); 					    /*输出lc*/return 0;
}

5.!!将顺序表L中的所有奇数调整到表的左边,所有偶数调整到表的右边

/*
请编写一个算法函数partion(sequence_list *L),尽可能快地将顺序表L中的所有奇数调整到表的左边,
所有偶数调整到表的右边,并分析算法的时间复杂度。
*/
/**********************************/
/*文件名称:lab1_05.c                 */
/**********************************/
#include "sequlist.h"
/*请将本函数补充完整,并进行测试*/
void partion(sequence_list *L)
{int i, j;           // 定义两个指针i和jdatatype x;         // 定义临时变量xi = 0;              // 初始化i为表头位置j = L->size - 1;    // 初始化j为表尾位置do {while (i < j && L->a[i] % 2 == 1)   // 从表头向表尾查找第一个偶数元素i++;while (i < j && (L->a[j] & 0x1) == 0)   // 从表尾向表头查找第一个奇数元素j--;if (i < j) {    // 如果i<j,表示找到了需要交换的元素x = L->a[i];         // 交换元素位置L->a[i++] = L->a[j];L->a[j--] = x;}} while (i < j);    // 当i<j时继续循环}int main()
{sequence_list L;inputfromfile(&L,"3.txt");print(&L);  						/*输出表L*/partion(&L);print(&L);  						/*输出新表*/return 0;
}

实验2不带头结点的单链表

1.删除不带头结点单链表head中第一个值为x 的结点。

/*编写函数slnklist delx(linklist head, datatype x),删除不带头结点单链表head中第一个值为x 的结点。
并构造测试用例进行测试。
*/
/**********************************/
/*文件名称:lab2_01.c                            */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist delx(linklist head,datatype x)
{linklist  pre,p;pre=NULL;p=head;while (p &&p->info!=x){pre=p;p=p->next;}if (p){if (pre==NULL)head=p->next;elsepre->next=p->next;free(p);}return head;}int main()
{   datatype x;linklist head;head=creatbyqueue();		/*尾插入法建立单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);head=delx(head,x);			/*删除单链表的第一个值为x的结点*/print(head);delList(head);				/*释放单链表空间*/return 0;
}

2.!!!将不带头结点的单链表head就地 倒置

/**********************************/
/*文件名称:lab2_02.c                 */
/**********************************/
/*
假设线性表(a1,a2,a3,…an)采用不带头结点的单链表存储,
请设计算法函数linklist reverse1(linklist  head)和
void reverse2(linklist *head)将不带头结点的单链表head就地 倒置,
使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
*/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist reverse1(linklist head)
{linklist p, s;  // 定义两个指针p和sp = head;       // 将p指向头节点head = NULL;    // 初始化反转后的链表头节点为空while (p)       // 当p非空时进行循环{s = p;                  // 保存p节点p = p->next;            // 移动p指针到下一个节点s->next = head;         // 将s节点的next指针指向反转后的链表头节点head = s;               // 更新反转后的链表头节点为s节点}return head;    // 返回反转后的链表头节点
}void reverse2(linklist *head)
{linklist p,s;p=*head;*head=NULL;while (p){s=p;p=p->next;s->next=*head;*head=s;}
}int main()
{   datatype x;linklist head;head=creatbystack();		    /*头插入法建立单链表*/print(head);				            /*输出原链表*/head= reverse1(head);		/*倒置单链表*/print(head);				            /*输出倒置后的链表*/reverse2(&head);			        /*倒置单链表*/print(head);delList(head);return 0;
}

3.!!插入

/*
假设不带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),
将值为x的结点插入到链表head中,并保持链表有序性。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
*/
/**********************************/
/*文件名称:lab2_03.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist insert(linklist head ,datatype x)
{linklist pre,p,s;pre=NULL;p=head;while ( p && p->info<x ){pre=p;p=p->next;}s=(linklist )malloc(sizeof(node));s->info=x;if (pre==NULL){s->next=head;head=s;}else{s->next=p;pre->next=s;}return head;
}
int main()
{   datatype x;linklist head;printf("输入一组升序排列的整数:\n");head=creatbyqueue();				/*尾插入法建立单链表*/print(head);printf("请输入要插入的值:");scanf("%d",&x);head=insert(head,x);				/*将输入的值插入到单链表适当位置*/print(head);delList(head);return 0;
}

4.删除

/*
编写算法函数linklist delallx(linklist head, int x),删除不带头结点单链表head中所有值为x的结点。
*/
/**********************************/
/*文件名称:lab2_04.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist delallx(linklist head,int x)
{linklist  pre,p;pre=NULL;p=head;while(p){while (p &&p->info!=x)            //找值为x的结点{pre=p;p=p->next;}if (p)                                          //找到了{if (pre==NULL)                 //删除的结点为第一个结点{head=p->next;free(p);p=head;}else                                    //删除的结点不是第一个结点{pre->next=p->next;free(p);p=pre->next;}}}return head;
}
int main()
{   datatype x;linklist head;head=creatbyqueue();				/*尾插入法建立单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);head=delallx(head,x);print(head);delList(head);return 0;
}

实验3 带头结点的单链表

1.删除带头结点单链表head中第一个值为x 的结点

/*编写函数void delx(linklist head, datatype x),删除带头结点单链表head中第一个值为x 的结点。
并构造测试用例进行测试。
*/
/**********************************/
/*文件名称:lab3_01.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void delx(linklist head,datatype x)
{linklist pre,p;pre=head;p=head->next;while (p && p->info!=x)         //查找{pre=p;p=p->next;}if (p)                                          //删除{pre->next=p->next;free(p);}}int main()
{   datatype x;linklist head;head=creatbyqueue();		/*尾插入法建立带头结点的单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);delx(head,x);			/*删除单链表的第一个值为x的结点*/print(head);delList(head);				/*释放单链表空间*/return 0;
}

2.带头结点的单链表head就地倒置

/**********************************/
/*文件名称:lab3_02.c                 */
/**********************************/
/*
假设线性表(a1,a2,a3,…an)采用带头结点的单链表存储,请设计算法函数void reverse(linklist  head),
将带头结点的单链表head就地倒置,使表变成(an,an-1,…a3.a2,a1)。并构造测试用例进行测试。
*/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void reverse(linklist head)
{linklist p,s;p=head->next;head->next=NULL;while (p){s=p;p=p->next;s->next=head->next;head->next=s;}
}
int main()
{   datatype x;linklist head;head=creatbystack();			/*头插入法建立带头结点的单链表*/print(head);					/*输出原链表*/reverse(head);			/*倒置单链表*/print(head);					/*输出倒置后的链表*/delList(head);return 0;
}

!!!:是否带头结点的差别(带:第一个实际结点:head->next; 不带:第一个实际结点:head)

linklist p,s;
p=head;head=NULL;
while(p)
{s=p;p=p->next;s->next=head;head=s;
}
// 带头结点的单链表
linklist p,s;
p=head->next;
head->next=NULL;
while (p)
{s=p;p=p->next;s->next=head->next;head->next = s;
}

3.插入

/*
假设带头结点的单链表head是升序排列的,设计算法函数linklist insert(linklist head,datatype x),
将值为x的结点插入到链表head中,并保持链表有序性。
分别构造插入到表头、表中和表尾三种情况的测试用例进行测试。
*/
/**********************************/
/*文件名称:lab3_03.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void  insert(linklist head ,datatype x)
{linklist pre,p,s;pre=head;p=head->next;while (p && p->info<x)      {pre=p;p=p->next;}s=(linklist)malloc(sizeof(node));s->info=x;s->next=p;pre->next=s;
}
int main()
{   datatype x;linklist head;printf("输入一组升序排列的整数:\n");head=creatbyqueue();				/*尾插入法建立带头结点的单链表*/print(head);printf("请输入要插入的值:");scanf("%d",&x);insert(head,x);				    /*将输入的值插入到带头结点的单链表适当位置*/print(head);delList(head);return 0;
}

4.删除

/*
编写算法函数void  delallx(linklist head, int x),删除带头结点单链表head中所有值为x的结点。
*/
/**********************************/
/*文件名称:lab3_04.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void  delallx(linklist head,int x)
{linklist pre,p;pre=head;p=head->next;while(p){while (p &&p->info!=x)      //查找{pre=p;p=p->next;}if (p)                                      //找到了{pre->next=p->next;free(p);p=pre->next;                    //删除后p回到pre的后继结点}}
}
int main()
{   datatype x;linklist head;head=creatbyqueue();				/*尾插入法建立带头结点的单链表*/print(head);printf("请输入要删除的值:");scanf("%d",&x);delallx(head,x);print(head);delList(head);return 0;
}

5.!!!将head中的结点按结点值 升序排列

/*
已知线性表存储在带头结点的单链表head中,请设计算法函数void sort(linklist head),将head中的结点按结点值升序排列。
*/
/**********************************/
/*文件名称:lab3_05.c                 */
/**********************************/
#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
void sort(linklist head)
{linklist pre, q, p, s;p = head->next;     // 将p指向链表的第一个节点head->next = NULL;  // 将头节点的next指针置为空,相当于创建一个空的链表while (p) {s = p;          // 保存p节点p = p->next;    // 移动p指针到下一个节点pre = head;     // 初始化pre指针为头节点q = head->next; // 初始化q指针为头节点的下一个节点while (q && q->info < s->info) {    // 找到s节点的插入位置,即找到第一个比s大的节点位置pre = q;q = q->next;}s->next = q;    // 将s节点插入到pre和q之间pre->next = s;  // 修改pre的next指针,将s节点插入到pre和q之间}
}int main()
{        linklist head;head=creatbyqueue();   		/*尾插法建立带头结点的单链表*/print(head);    			    /*输出单链表head*/sort(head);     				/*排序*/print(head);delList(head);return 0;
}

6.

实验5  递归

1.!!!!求数组a[left..right]中的最大数

/*编写递归算法int max(int a[],int left, int right),求数组a[left..right]中的最大数。
*/#include "ArrayIo.h"
/*请将本函数补充完整,并进行测试*/
int max(int a[],int left,int right)
{int lmax,rmax,mid;if (left==right) return a[left];else{mid=(left+right)/2;lmax=max(a,left,mid);rmax=max(a,mid+1,right);return lmax>rmax?lmax:rmax;}}
int main()
{   int a[10];input(a,10);print(a,10);printf("数组的最大数是:%d\n",max(a,0,9));return 0;
}

2.!!!!将数组a[left..right]中的所有奇数调整到表的左边,所有偶数调整到表的右边。

/*
请编写一个递归算法函数void partion(int a[], int left, int right),
将数组a[left..right]中的所有奇数调整到表的左边,所有偶数调整到表的右边。
*/
#include "ArrayIo.h"
#define N 10
/*请将本函数补充完整,并进行测试*/
void partion(int a[], int left, int right)
{int x;if (left < right){while (left < right && a[left] % 2 == 1)  // 从左边找到第一个偶数left++;while (left < right && a[right] % 2 == 0)  // 从右边找到第一个奇数right--;if (left < right){x = a[left];a[left] = a[right];a[right] = x;  // 交换左边的偶数和右边的奇数partion(a, left + 1, right - 1);  // 递归处理剩余部分}}
}int main()
{   int a[N];init(a,N);				/*随机产生N个数*/print(a,N);partion(a,0,N-1);print(a,N);return 0;
}

3.!!!!!!!冒泡法进行升序排序   采用二分查找法在数组a[left..right]中查找值为key的元素所在的位置

这是一个经典的冒泡排序算法,使用递归的方式实现。具体步骤如下:

  1. 首先判断数组长度 n 是否大于0。
  2. 设置一个标志 flag 为0,用于标记本轮循环是否发生交换操作。
  3. 遍历数组,比较相邻的元素,如果前面的元素大于后面的元素,则交换它们,并将 flag 设置为1。
  4. 如果本轮循环发生了交换操作,则递归调用 bubbleSort 函数对长度为 n-1 的子数组进行排序。
  5. 递归结束条件是数组长度 n 不大于0。

这是一个经典的二分查找算法,使用递归的方式实现。具体步骤如下:

  1. 首先判断左指针 left 是否大于右指针 right,如果大于则表示找不到目标元素,返回-1。
  2. 否则,计算中间位置 mid,并判断中间元素与目标元素的大小关系:
    • 如果中间元素等于目标元素,则返回中间位置 mid
    • 如果目标元素小于中间元素,则在左半部分继续查找,即调用 binSearch 函数查找左半部分。
    • 如果目标元素大于中间元素,则在右半部分继续查找,即调用 binSearch 函数查找右半部分。

通过以上步骤,可以在有序数组中高效地查找目标元素的位置。

 

/*请编写递归函数void bubbleSort(int a[],int n),对长度为n的数组采用冒泡法进行升序排序。请编写递归函数int binSearch(int a[], int left, int right,int key),采用二分查找法在数组a[left..right]中查找值为key的元素所在的位置,若查找失败函数返回-1。*/#include "ArrayIo.h"
#define N 10
/*请将本函数补充完整,并进行测试*/
void bubbleSort(int a[],int n)
{    int i,t;int flag;if(n>0){flag=0;for(i=0;i<n-1;i++){if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;flag=1;}}if (flag==1) bubbleSort(a,n-1);}return ;
}
int binSearch(int a[], int left,int right,int key)
{int mid;if (left>right)return -1;else{mid=(left+right)/2;if (a[mid]==key)return mid;elseif (key<a[mid])return binSearch(a,left,mid-1,key);elsereturn binSearch(a,mid+1,right,key);}
}
int main()
{   int x,pos,a[N];init(a,N);bubbleSort(a,N);print(a,N);printf("请输入要查找的数:\n");scanf("%d",&x);pos=binSearch(a,0,N-1,x);if (pos!=-1) printf("a[%d]=%d\n",pos,x);else printf("Not found!\n");return 0;
}

4.返回表中最大数所在的结点地址

/*
已知带头结点的单链表结构定义同实验3,假设链表中所有结点值均不相同,
请编写一个递归函数linklist max(linklist head),返回表中最大数所在的结点地址,若链表为空,返回NULL。
*/#include "slnklist.h"
/*请将本函数补充完整,并进行测试*/
linklist max(linklist head)
{linklist m;if (head->next==NULL)return NULL;elseif (head->next->next==NULL)return head->next;else{m=max(head->next);return head->next->info > m->info ? head->next:m;}
}
int main()
{   linklist head,p;head=creatbyqueue();print(head);p=max(head);if (p)printf("max=%d\n",p->info);elseprintf("链表为空\n");return 0;
}

相关文章:

数据结构C语言--基础实验

实验1 线性表的顺序实现 1.&#xff01;顺序表的倒置 /**********************************/ /*文件名称&#xff1a;lab1-01.c */ /**********************************/ /*基于sequlist.h中定义的顺序表&#xff0c;编写算法函数reverse(sequence_list *L)&…...

wireshark抓包并进行Eigrp网络协议分析

路由协议 Eigrp ​ EIGRP:Enhanced Interior Gateway Routing Protocol 即 增强内部网关路由协议。也翻译为 加强型内部网关路由协议。 EIGRP是Cisco公司的私有协议&#xff08;2013年已经公有化&#xff09;。 EIGRP结合了链路状态和距离矢量型路由选择协议的Cisco专用协议&a…...

力扣刷题-二叉树-二叉树的层序遍历(相关题目总结)

思路 层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。这种遍历的方式和我们之前讲过的都不太一样。 需要借用一个辅助数据结构即队列来实现&#xff0c;队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的…...

fundamental notes in 3D math

平面方程 a x b y c z d axbycz d axbyczd, 法向量 a , b , c a,b,c a,b,c, 点到平面的距离为 d / s q r t ( a 2 b 2 c 2 ) d / sqrt(a^2 b^2 c^2) d/sqrt(a2b2c2) , 距离可为正, 为负, 为正表示跟法向量方向一致, 为负表示相反 点 ( x o , y o , z o ) (x_o, y_o, z…...

【Java 进阶篇】JQuery DOM操作:舞动网页的属性魔法

在前端的舞台上&#xff0c;属性操作是我们与HTML元素进行互动的关键步骤之一。而JQuery&#xff0c;这位前端开发的巫师&#xff0c;通过简洁而强大的语法&#xff0c;为我们提供了便捷的属性操作工具。在这篇博客中&#xff0c;我们将深入研究JQuery DOM操作中的属性操作&…...

腾讯云5年云服务器还有吗?腾讯云5年时长服务器入口在哪?

如果你是一名企业家或者是一个热衷于数字化转型的创业者&#xff0c;那么腾讯云最近推出的一项优惠活动绝对不会让你无动于衷。现在&#xff0c;腾讯云正在大力推广一项5年特价云服务器活动&#xff0c;只需要花费3879元&#xff0c;你就可以享受到腾讯云提供的优质服务。 腾讯…...

odoo在iot领域的发展情况

Odoo 是一个全面的集成商业管理软件套装&#xff0c;主要提供企业资源规划 (ERP)、客户关系管理 (CRM)、电子商务、会计、库存管理等功能。在 IoT&#xff08;物联网&#xff09;领域&#xff0c;Odoo 侧重于通过提供一个中心化的平台来整合多方面的业务流程&#xff0c;包括生…...

Paas-云原生-容器-编排-持续部署

了解云原生 云原生架构让企业的基础设施,从简单的资源池化,转向以应用为中心,为应用赋能的敏捷、自运维、安全的云原生基础设施。以应用为中心的云原生基础设置,可以支持多种类型的应用,如微服务应用,中间件应用和AI 应用;可以提升应用交付效率,简化应用管理的复杂度;…...

sass 生成辅助色

背景 一个按钮往往有 4 个状态。 默认状态hover鼠标按下禁用状态 为了表示这 4 个状态&#xff0c;需要设置 4 个颜色来提示用户。 按钮类型一般有 5 个&#xff1a; 以 primary 类型按钮为例&#xff0c;设置它不同状态下的颜色&#xff1a; <button class"btn…...

DevEco Studio开发工具下载、安装(HarmonyOS开发)_For Mac

一、说明 初学HarmonyOS开发&#xff0c;DevEco Studio开发工具的安装和使用是必须的。 &#xff08;注&#xff1a;不多废话&#xff0c;跟着下面流程操作下载、安装DevEco Studio即可。&#xff09; 二、下载DevEco Studio 1.官网下载地址&#xff1a; https://developer.…...

按键精灵中的字符串常用的场景

在使用按键精灵编写脚本时&#xff0c;与字符串有关的场景有以下几种&#xff1a; 1. 用时间字符串记录脚本使用截止使用时间 Dim localTime "2023-11-12 00:15:14" Dim networkTime GetNetworkTime() TracePrint networkTime If networkTime > localTime The…...

python数据结构与算法-01_抽象数据类型和面向对象编程

Python 一切皆对象 举个例子&#xff0c;在 python 中我们经常使用的 list l list() # 实例化一个 list 对象 l l.append(1) # 调用 l 的 append 方法 l.append(2) l.remove(1) print(len(l)) # 调用对象的 __len__ 方法在后面实现新的数据类型时&#xff0c;我们将…...

纯手写 模态框、消息弹框、呼吸灯

在有些做某些网页中&#xff0c;应用不想引用一些前端框架&#xff0c;对于一些比较常用的插件可以纯手写实现 1、模态框 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Water Ripple Effect</title> <style…...

windows安装composer并更换国内镜像

第一步、官网下载 下载地址 Composer安装https://getcomposer.org/Composer-Setup.exe第二步、双击安装即可 第三步选择 php安装路径并配置path 第四步、 composer -v查看安装是否成功&#xff0c;出现成功界面 第五步、查看镜像地址并更换&#xff08;composer国内可能较慢…...

c++ basic_string 和string区别

在C中&#xff0c;basic_string 是一个模板类&#xff0c;而 string 是 basic_string 的一个具体实例化&#xff0c;即 basic_string<char>。basic_string 模板类被设计为支持多种字符类型&#xff0c;而 string 是其中一种特定字符类型的字符串类。 具体来说&#xff0…...

怎么在uni-app中使用Vuex 简单demo,通俗易懂(第二篇)

Vuex是Vue.js的官方状态管理库&#xff0c;可以帮助我们更好地管理和维护复杂状态和数据共享。在Vuex中&#xff0c;整个应用的状态被集中到一个单一的状态树中&#xff0c;这个状态树包含了所有的共享状态和数据。通过状态管理模块、getter、mutation、action等机制&#xff0…...

相机专业模型详解,各个参数作用,专业模式英文全称和缩写

ISO&#xff08;感光度&#xff09; 全称&#xff1a; International Organization for Standardization缩写&#xff1a; ISO Shutter Speed&#xff08;快门速度&#xff09; 全称&#xff1a; Shutter Speed缩写&#xff1a; SS Aperture&#xff08;光圈大小&#xff09; 全…...

将随机数设成3407,让你的深度学习模型再涨一个点!文再附3种随机数设定方法

随机数重要性 深度学习已经在计算机视觉领域取得了巨大的成功&#xff0c;但我们是否曾想过为什么同样的模型在不同的训练过程中会有不同的表现&#xff1f;为什么使用同样的代码&#xff0c;就是和别人得到的结果不一样&#xff1f;怎么样才能保证自己每次跑同一个实验得到的…...

Spring后端HttpClient实现微信小程序登录

这是微信官方提供的时序图。我们需要关注的是前后端的交互&#xff0c;以及服务端如何收发网络请求。 小程序端 封装基本网络请求 我们先封装一个基本的网络请求。 const baseUrl"localhost:8080" export default{sendRequsetAsync } /* e url&#xff1a;目标页…...

Linux下部署MySQL-MHA环境

目前的环境如下&#xff1a;centos7 有四台虚拟机&#xff0c;20&#xff0c;21&#xff0c;22&#xff0c;23 20为master&#xff0c;21&#xff0c;22&#xff0c;23 为20的从库&#xff0c;21 为管理节点。 搭建MySQL主从复制的&#xff0c;可以参考我之前的文章 MHA&#…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

文件上传漏洞防御全攻略

要全面防范文件上传漏洞&#xff0c;需构建多层防御体系&#xff0c;结合技术验证、存储隔离与权限控制&#xff1a; &#x1f512; 一、基础防护层 前端校验&#xff08;仅辅助&#xff09; 通过JavaScript限制文件后缀名&#xff08;白名单&#xff09;和大小&#xff0c;提…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

python可视化:俄乌战争时间线关键节点与深层原因

俄乌战争时间线可视化分析&#xff1a;关键节点与深层原因 俄乌战争是21世纪欧洲最具影响力的地缘政治冲突之一&#xff0c;自2022年2月爆发以来已持续超过3年。 本文将通过Python可视化工具&#xff0c;系统分析这场战争的时间线、关键节点及其背后的深层原因&#xff0c;全面…...

Spring AI中使用ChatMemory实现会话记忆功能

文章目录 1、需求2、ChatMemory中消息的存储位置3、实现步骤1、引入依赖2、配置Spring AI3、配置chatmemory4、java层传递conversaionId 4、验证5、完整代码6、参考文档 1、需求 我们知道大型语言模型 &#xff08;LLM&#xff09; 是无状态的&#xff0c;这就意味着他们不会保…...