链表与文件

链表

单链表

1.链表的初始化

typedef struct node
{char name[100];int  number;struct node *next;
}Node,*LinkList;}Node;

2.链表的初始化函数(Initlist)

LinkList InitList()
{LinkList head;head=(Node*)malloc(sizeof(Node));head->next=NULL;return head;
}

3.建立链表(Creatbyrear/Creatbyhead)

(1)尾插法

有头节点

void CreatByRear(LinkList head)
{Node *r,s;char name[100];int  number;r=head;printf("输入");while(1){scanf("%s",name);scanf("%d",&number);if(number==0){break;}
*                s=(Node*)malloc(sizeof(Node));strcpy(s->name,name);s->number=number;r->next=s;r=s;}r->next=NULL;
}

无头结点

Node* Creatbyrear()
{Node* head;head=NULL;Node *p,r;while(1){char name[100];int number;scanf("%s",name);scanf("%d",&number);if(number==0){break;}
*                p=(Node*)malloc(sizeof(Node));strcpy(p->name,name);p->number=number;p->next=NULL;if(NULL==head){head=p;r=head;}else{r->next=p;r=p;}}return head;
}
(2)头插法

有头节点

void CreatByHead(LinkList head)
{Node s;char name[100];int number;printf("输入");while(1){scanf("%s",name);scanf("%d",&number);if(number==0){break;}
*                s=(Node*)malloc(sizeof(Node));strcpy(s->name,name);s->number=number;s->next=head->next;head->next=s;}
}

无头结点

Node* Creatbyhead()
{Node *head;head=NULL;Node s;printf("输入\n");while(1){int number;char name[100];scanf("%s",name);scanf("%d",&number);if(number==0){break;}*s=(Node*)malloc(sizeof(Node));strcpy(s->name,name);s->number=number;s->next=head;head=s;}return head;
}

4.输出(Output)

有头节点

void OutPut(LinkList head)
{Node *p;p=head->next;printf("输出\n");while(p){printf("%s ",p->name);printf("%d\n",p->number);p=p->next;}
}

无头结点

void Output(Node *head)
{Node *p;p=head;while(p){printf("%s ",p->name);printf("%d\n",p->number);p=p->next;}
}

5.插入(Insert)

有头节点

void Insert(LinkList head,int i)
{Node *p=head,s;int j=0;while(j<i-1&&p){p=p->next;j++;}if(p){printf("插入");*s=(Node*)malloc(sizeof(Node));scanf("%s",s->name);scanf("%d",&s->number);s->next=p->next;p->next=s;}
}

头插入

void InsertHead(LinkList head)
{Node s;*s=(Node*)malloc(sizeof(Node));printf("头插入");scanf("%s",s->name);scanf("%d",&s->number);s->next=head->next;head->next=s;} 

尾插入

void InsertRear(LinkList head)
{Node *p=head,s;while(p&&p->next){p=p->next;}if(p){printf("末插入");
*                s=(Node*)malloc(sizeof(Node));scanf("%s",s->name);scanf("%d",&s->number);p->next=s;s->next=NULL;}}

无头结点

Node* Insertlist(Node *head,int pos)
{printf("插入\n");Node *s,p;*s=(Node*)malloc(sizeof(Node));scanf("%s",s->name);scanf("%d",&s->number);if(pos==1){s->next=head;head=s;}else{p=head;int j=1;while(j<pos-1&&p){p=p->next;j++;}if(p){s->next=p->next;p->next=s;}}return head;
}

6.删除(Delete)

有头节点

void Delete(LinkList head,int pos)
{Node *r=head,*p;int j=0;printf("删除后");while(j<pos-1&&r){r=r->next;j++;}if(r==NULL||r->next==NULL){printf("Error!");}else{p=r->next;r->next=p->next;free(p);}}

无头结点

Node* Delete(Node *head,int pos)
{printf("删除后的");Node *p,*q;p=head;if(head==NULL){printf("ERROR!");}else if(pos==1){q=head;head=head->next;free(q);}else{int j=1;while(j<pos-1&&p){p=p->next;j++;}if(p==NULL||p->next==NULL){printf("ERROR");}else{q=p->next;p->next=q->next;free(q);}}return head;
}

7.查询(Search)

有头节点

Node* Search(LinkList head,char name[])
{Node *p=head->next;while(p){if(strcmp(p->name,name)!=0){p=p->next;}else{break;}if(p=NULL){printf("error!") ;}return p;}
}

无头结点

void Search(Node *head)
{printf("查询");Node *p;p=head;int t=0;char name[100];scanf("%s",name);while(1){if(strcmp(p->name,name)==0){printf("%s ",p->name);printf("%d\n",p->number);t++;}p=p->next;if(p==NULL){break;}}if(t==0){printf("ERROR!");}
}

8.长度(Length)

有头节点

int ListLength(LinkList head)
{int sum=0;Node *p=head->next;while(p){p=p->next;sum++;}return sum;} 

无头结点

void Length(Node *head)
{printf("长度\n");Node *p;int count=0;p=head;while(p){if(p==NULL){break;}else{p=p->next;count++;}}printf("%d",count);
}

9.合并链表(Merge)

有头节点

void Merge(LinkList a,LinkList b){Node *p,*q,*r;LinkList c;p=a->next;q=b->next;r=c=a;while(p&&q){if(p->number<q->number){r->next=p;r=p;p=p->next;}else{r->next=q;r=q;q=q->next;}}while(p){r->next=p;r=p;p=p->next;}while(q){r->next=q;r=q;q=q->next;}free(b);}

10.逆置(Reverse)

有头节点

void Reverse(LinkList head)
{Node *p,*q;p=head->next;head->next=NULL;while(p){q=p->next;p->next=head->next;head->next=p;p=q;}}
Node* Reverse (Node *head)
{    //三指针法if (head == NULL || head->next == NULL){return head;}Node *p = NULL;Node *q = head->next;Node *next ;while (q != NULL) {next = q->next;q->next = p;p = q;q = next;}head->next=p;return head;
}

无头结点

Node* Reverse(Node* head){Node *p,*q;p=head->next;if(head==NULL){return 0;}if(head->next==NULL)    {return head;}    head->next=NULL;while(p->next!=NULL){q=p->next;p->next=head;head=p;p=q;}p->next=head;head=p;return head;}

11.main函数

有头节点

int main()
{LinkList a,b;a=InitList();CreatByRear(a);OutPut(a);Insert(a,2);OutPut(a);InsertHead(a);OutPut(a);InsertRear(a);OutPut(a);Delete(a,4);OutPut(a);int sum;sum=ListLength(a);printf("%d\n",sum);b=InitList();CreatByHead(b);OutPut(b);Delete(b,4);OutPut(b);Merge(a,b);OutPut(a);Reverse(a);OutPut(a);return 0;
}

无头结点

int main()
{node *a,*b;a=CreatByRear(a);OutPut(a);a=Insert(a,2);OutPut(a);Delete(a,4);OutPut(a);ListLength(a);b=CreatByHead(b);OutPut(b);Delete(b,4);OutPut(b);Merge(a,b);OutPut(a);a=Reverse(a);OutPut(a);return 0;
}

循环链表

  • 循环链表是一种特殊的链表数据结构,与单向链表或双向链表相比,循环链表的最后一个节点的下一个节点指向第一个节点,从而形成一个环形结构。因此,循环链表可以在最后一个节点后继续添加节点,并且可以像单向链表或双向链表一样遍历、查找和删除节点。循环链表通常有一个头指针和一个尾指针,它们指向第一个节点和最后一个节点,以便在添加或删除节点时快速定位。

  • p->next==head,判断该节点的指针域是否指向链表头节点。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node
{char name[100];int number;struct node *next;
}Node;
Node* Initlist()//初始化
{Node *head;head=(Node*)malloc(sizeof(Node));head->next=NULL;return head;
}
void Creatbyrear(Node *head)//尾插法
{printf("输入\n");Node *r,*s;char name[100];int number;r=head;while(1){s=(Node*)malloc(sizeof(Node));scanf("%s",name);scanf("%d",&number);if(number==0){break;}strcpy(s->name,name);s->number=number;r->next=s;r=s;}r->next=head;
}
void Output(Node* head)//输出
{printf("输出\n");Node *s;s=head->next;while(!(s==head)){printf("%s %d\n",s->name,s->number);s=s->next;}
}
void Creatbyhead(Node* head)//头插法
{Node *s;char name[100];int number;printf("输入");while(1){scanf("%s",name);scanf("%d",&number);if(number==0){break;}s=(Node*)malloc(sizeof(Node));strcpy(s->name,name);s->number=number;s->next=head->next;head->next=s;}
}
void Delete(Node* head,int pos)//删除{Node *r=head,*p;int j=0;printf("删除后\n");do{r=r->next;j++;}while(j<pos-1&&(r!=head));if(r==head||r->next==head){printf("Error!");}else{p=r->next;r->next=r->next->next;free(p);Output(head);}}void Insert(Node* head,int i)//插入
{Node *p=head,*s;int j=0;while(j<i-1&&p){p=p->next;j++;}if(p){printf("插入\n");s=(Node*)malloc(sizeof(Node));scanf("%s",s->name);scanf("%d",&s->number);s->next=p->next;p->next=s;}
}
void Inserthead(Node* head)//头插入
{Node *s;s=(Node*)malloc(sizeof(Node));printf("头插入\n"); scanf("%s",s->name);scanf("%d",&s->number);s->next=head->next;head->next=s; } void Insertrear(Node* head)//尾插入{Node *p=head,*s;while((p->next!=head)){p=p->next;}if(p){printf("末插入");s=(Node*)malloc(sizeof(Node));scanf("%s",s->name);scanf("%d",&s->number);p->next=s;s->next=head; }}Node* Search(Node* head,char name[])//查询
{printf("查询\n");Node *p=head->next;while(p!=head){if(strcmp(p->name,name)!=0){p=p->next;}else{break;}}if(p==head){printf("error!") ;}return p;
}
void Listlength(Node* head)//长度
{printf("链表长度:\n");int sum=0;Node *p=head->next;while(p!=head){p=p->next;sum++;}printf("%d",sum); } Node* Reverse (Node *head)//逆置{    //三指针法if (head == NULL || head->next == NULL){return head;}Node *p = NULL;Node *q = head->next;Node *next ;while (q != head) {next = q->next;q->next = p;p = q;q = next;}head->next=p;return head;
}
int main()
{Node *a,*b;a=Initlist();Creatbyrear(a);Delete(a,2);a=Reverse(a);Output(a); return 0;
}

文件

打开文件

 FILE *fp;fp=fopen("d:/masm.rar/string.h","wt");

r :read 读,以只读的方式打开文件,文件必须存在!
w :write 写,以只写的方式打开文件,文件如果存在则打开并 清空文件内容,反之新建一个同名文件
a :append 追加,以追加的方式打开文件,文件如果存在则打开,不清除原内容,并在原内容之后,文件尾标志EOF之前继续写入,反之新建一个同名文件
t :text 文本文件,可忽略不写
b :binary 二进制文件
+:w+r 允许读和写

关闭文件

fclose(fp);

成功,返回0;发生错误,返回非0值;

获取文件的属性

fileno()
功 能:把文件流指针转换成文件描述符
表头文件:#include <stdlib.h>
定义函数:int fileno(FILE *fp)
返回值 :返回和fp文件流对应的文件描述符。如果失败,返回-1。

filelength()
功 能:返回文件描述字对应的文件大小,以字节为单位。
表头文件:#include<io.h>
定义函数:long filelength(int handle_no);

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
int main()
{FILE *fp;int fno,fsize;char ch;gets(filename);fp=fopen(filename,"a+");fno=fileno(fp);fsize=filelength(fno);printf("%d\n",fsize);fclose(fp);return 0;} 

文件的顺序读写

单字符读写函数

fgetc()
fputc()

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#include<io.h>
int main()
{FILE *fp;int i;char filename[1000];char ch;gets(filename);fp=fopen(filename,"a+");while((ch=fgetc(fp))!=EOF){printf("%c",ch);}char data[10000];while(1){if(toupper(getche())=='Y'){gets(data);for(i=0;i<strlen(data);i++){fputc(data[i],fp);}}else{fclose;getche();break;}}fp=fopen(filename,"rt");if(fp==NULL){getch();exit(1);}while((ch=fgetc(fp))!=EOF);{printf("%c",ch);}fclose(fp);return 0;} 

字符串的读写函数

fgets()
fputs()

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<io.h>
#include<ctype.h>
int main()
{FILE *fp;char filename[1000],data[1000];gets(filename);fp=fopen(filename,"at+");if(fp==NULL){getche();exit(1);}while((fgets(data,10,fp))!=NULL){printf("%s",data);}while(1){if(toupper(getche())=='Y'){gets(data);fputs(data,fp);}else{fclose(fp);exit(1);}}fopen(filename,"rt");if(fp==NULL){exit(1);}while(fgets(data,10,fp)!=NULL){printf("%s",data);}fclose(fp);return 0;
}
#include<stdio.h>
#include<string.h>
#include<io.h>
#include<stdlib.h>
int main()
{FILE *fp;int i,j,count,count1;char string[1000000],t,ch;fp=fopen("d:/masm.rar/lab0555.asm","rt");if(fp==NULL){exit(1);}for(i=0;(ch=fgetc(fp))!=EOF;i++){string[i]=ch;putchar(string[i]);}fclose(fp);count1=i;fp=fopen("d:/masm.rar/DOSBox 0.74","rt");if(fp==NULL){exit(1);}for(i=count1;(ch=fgetc(fp))!=EOF;i++){string[i]=ch;printf("%c",string[i]);}fclose(fp);count=i;for(i=0;i<count;i++){for(j=i+1;j<count;j++){if(string[i]<string[j]){t=string[i];string[i]=string[j];string[j];}}}fp=fopen("d:/masm.rar/string.h","wt");fputs(string,fp);fclose(fp);return 0;} 

格式化字符串读写函数

fscanf()
fprintf()

#include<stdio.h>
#include<stdlib.h>
int main()
{struct student{char num[100];char name[100];char sex[100];}class[100];FILE *fp;int i;fp=fopen("d:/masm.rar/list","wt");if(fp==NULL){exit(1);}else{for(i=0;i<3;i++){scanf("%s",class[i].num);scanf("%s",class[i].name);scanf("%s",class[i].sex);fprintf(fp,"%s %s %s\n",class[i].num,class[i].name,class[i].sex);}}fclose(fp);fopen("d:/masm.rar/list","rt");i=0;while(fscanf(fp,"%s %s %s",class[i].num,class[i].name,class[i].sex)!=EOF){printf("%s %s %s\n",class[i].num,class[i].name,class[i].sex);i++;}fclose(fp);return 0;
}

数据块读写操作

fread()
fwrite()

#include<stdio.h>
#include<stdlib.h>
int main()
{struct student{char num[100];char name[100];char sex[100];}class[100];FILE *fp;int i;fp=fopen("d:/masm.rar/list","wt");if(fp==NULL){exit(1);}else{for(i=0;i<3;i++){scanf("%s",class[i].num);scanf("%s",class[i].name);scanf("%s",class[i].sex);fwrite(&class[i],sizeof(struct student),1,fp);}}fclose(fp);fp=fopen("d:/masm.rar/list","rt");i=0;while(fread(&class[i],sizeof(struct student),1,fp)!=NULL){printf("%s %s %s\n",class[i].num,class[i].name,class[i].sex);i++;}fclose(fp);return 0;
}

文件的随机读写

rewind()
将文件内部的位置指针移到文件的开始位置。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{FILE *fp;char ch,str[20];fp=fopen("d:/masm.rar/haha","at+");if(fp==NULL){exit(1);}gets(str);fwrite(str,strlen(str),1,fp);ch=fgetc(fp);rewind(fp);while(ch!=EOF){putchar(ch);ch=fgetc(fp);}printf("\n");fclose(fp);return 0;
}

fseek()

#include<stdio.h>
#include<stdlib.h>
struct student
{        char num[20];char name[20];char sex[20];
}q;
int main()
{FILE *fp;int i=1;fp=fopen("d:/masm.rar/list","rt");if(fp==NULL){exit(1);}fseek(fp,i*sizeof(struct student),0);fread(&q,sizeof(struct student),1,fp);fclose(fp);return 0;
}

ftell()
得到位置指针的当前位置,如果返回值为-1L,则表示出错。

#include<stdio.h>
#include<stdlib.h>
struct student
{        char num[20];char name[20];char sex[20];
}q;
int main()
{FILE *fp;int i=1;fp=fopen("d:/masm.rar/list","rt");if(fp==NULL){exit(1);}int t=ftell(fp);printf("%d\n",t);fseek(fp,i*sizeof(struct student),0);fread(&q,sizeof(struct student),1,fp);t=ftell(fp);printf("%d",t);return 0;
}

putw 函数(适用于二进制文件)

putw函数表示整数输出。
其一般形式为: putw(i,fp);
功能:将整数i输出到文件fp之中。

getw 函数(只适用于二进制文件)

getw函数表示整数输入。
一般形式为:
int a;
a=getw(fp);
功能:从fp指向的文件中读取一个整数(2字节),整数由函数返回。只使用于二进制文件。

出错检查

feof(fp)

fp:文件指针变量
功能:判断文件是否处于文件结束位置。如果文件结束,则返回1,否则返回0。

ferror 函数

函数返回值:无错误出现时返回0;有错误出现时,返回一个非零值。

clearerr函数

clearerr的作用是使文件出错标志和文件结束标志置为0。假设在调用一个输入输出函数时出现错误,ferror函数值为一个非零值。应该立即调用clearerr(fp),使ferror(fp)的值变成0,以便再进行下一次的检测。只要出现文件读写出错标志,它就一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入输出函数。
对同一个文件每一次调用输入输出函数,都会产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/79927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp打ios包

uniapp在windows电脑下申请证书并打包上架 前言 该开发笔记记录了在window系统下&#xff0c;在苹果开发者网站生成不同证书&#xff0c;进行uniapp打包调试和上线发布&#xff0c;对window用户友好 注&#xff1a;苹果打包涉及到两种证书&#xff1a;开发证书 和 分发证书 …

OpenCV 图形API(48)颜色空间转换-----将 LUV 颜色空间的图像数据转换为 BGR 颜色空间函数LUV2BGR()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将图像从LUV颜色空间转换为BGR颜色空间。 该函数将输入图像从LUV颜色空间转换为BGR。B、G和R通道值的常规范围是0到255。 输出图像必须是8位无符…

HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?

1. 动机: 卷积神经网络中的卷积操作实际上是一个局部的操作,这样的话就会使得它虽然知道自己看的是什么,但是却不清楚他在图像中的位置信息,但是位置信息实际上是很有用的,因此CNN可能潜在的学习到了如何去编码这种位置信息。所以这篇论文就是为了研究这种位置信息是如何在…

56、如何快速让⼀个盒⼦⽔平垂直居中

在网页开发中&#xff0c;有多种方式能让一个盒子实现水平垂直居中。下面为你介绍几种常见且快速的方法。 1. 使用 Flexbox 布局 Flexbox 是一种非常便捷的布局模型&#xff0c;能够轻松实现元素的水平和垂直居中。 html <!DOCTYPE html> <html lang"en"&…

RAG应用过程监控系统选型:LangFuse

Langfuse 是一个开源的大语言模型&#xff08;LLM&#xff09;工程平台&#xff0c;旨在协助团队构建、调试和改进由人工智能驱动的应用程序。凭借其全面的工具套件&#xff0c;Langfuse 使开发者能够深入洞察其 LLM 应用程序&#xff0c;并优化性能。 Stars 数10,522Forks 数9…

Java+nanomsg快速实现去broker的数据通信

先说一下nanomsgJava需要做什么&#xff1a; 1、nanomsg的so文件的制作与放置路径 2、Java代码引入nanomsg的依赖 3、支持Socket参数的调节&#xff08;包括ipv4/ipv6的网络支持&#xff09; 在我目前的认知范围内要与一个通讯目标实现数据交互通常有这些方式 1、broker中间人…

lightgbm原理、特殊点、参数分析

lightgbm&#xff1a; 一、位置&#xff1a; 相比XGB&#xff0c;LGBM有更高效的计算效率和更低的内存占用&#xff0c;并且面对高维数据&#xff0c;LGBM算法拥有更好的过拟合特性&#xff0c;这使得在建模数据量日趋增加的今天&#xff0c;LGBM会更适合作为前期探索性建模的模…

车载软件架构 --- 二级boot设计说明需求规范

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

Cpp实现window上cmd执行效果

Cpp实现window上cmd执行效果 文章目录 Cpp实现window上cmd执行效果1.头文件包含部分2.main 函数部分3. 获取当前工作目录部分4.主循环部分5.退出条件部分6.处理 cd 命令部分7.执行其他命令部分8.读取命令输出部分9.关闭管道并处理返回码部分10.源码 1.头文件包含部分 #include…

STM32 HAL库FreeRTOS 中断管理

一、引言 在嵌入式系统开发中&#xff0c;STM32 微控制器凭借其高性能、低功耗和丰富的外设资源&#xff0c;被广泛应用于各种领域。FreeRTOS 作为一款轻量级、开源且功能强大的实时操作系统&#xff0c;为多任务处理提供了良好的支持。中断是嵌入式系统中实现实时响应外部事件…

在 UE5 编辑器中,由于游戏设置 -> EV100 设置,点击播放前后的光照不同。如何保持点击播放前后的光照一致?

​In Unreal Engine 5 (UE5), discrepancies in lighting between the editor and play modes are often due to auto exposure settings, particularly when using the EV100 system. To maintain consistent lighting across both modes, follow these steps:​YouTube1Epic …

[python] set

1.添加元素 在 Python 中&#xff0c;向 set 添加一个元素可以使用 add() 方法。如果添加的元素已经存在于 set 中&#xff0c;add() 不会重复添加&#xff08;因为 set 具有自动去重的特性&#xff09;。 方法 1&#xff1a;add(element)&#xff08;添加单个元素&#xff0…

第一期第18讲26:23

shell脚本以 .sh为后缀&#xff0c;里面存放着一行行要运行的linux指令。 shell脚本第一行一定为 #!/bin/bash&#xff0c;表示使用bash。 shell文件举例如下&#xff1a; #!/bin/bash echo "hello shell!" shell文件默认没有可执行权限&#xff0c;因此 chmod 777 m…

解决 Ubuntu 下 VTune 无法收集 CPU 硬件时间计数数据的问题

解决 Ubuntu 下 VTune 无法收集 CPU 硬件时间计数数据的问题 在 Ubuntu 上使用 Intel VTune Profiler 时遇到无法收集 CPU 硬件性能计数器数据的问题&#xff0c;通常是由于权限和系统配置问题导致的。以下是解决方案&#xff1a; 1. 检查并加载性能监控模块 首先确保 Linux…

健康元 以韧性换弹性

拼韧性的时候到了&#xff01; 一面是复杂的市场、政策环境与医药行业转型所叠加形成的向下压力&#xff1b;一面是AI技术深度赋能医药企业创新加速的向上机遇。 中国药企在经历了一轮群体性低潮期后&#xff0c;进入“结构性”分化的阶段。 在这一阶段上&#xff0c;一些财…

csv数据的读取

在地理信息系统&#xff08;GIS&#xff09;项目中&#xff0c;CSV&#xff08;Comma-Separated Values&#xff09;文件是一种常见的数据格式&#xff0c;用于存储表格数据。CSV 文件因其简单易用、可被多种软件读取而广泛应用于数据交换和存储。ArcPy 提供了强大的功能&#…

android Stagefright框架

作为Android音视频开发人员&#xff0c;学习Stagefright框架需要结合理论、源码分析和实践验证。以下是系统化的学习路径&#xff1a; 1. 基础准备 熟悉Android多媒体体系 掌握MediaPlayer、MediaCodec、MediaExtractor等核心API的用法。 理解Android的OpenMAX IL&#xff08…

【基于WSAAsyncSelec模型的通信程序设计】

文章目录 一、实验背景与目的二、实验设计与实现思路1. 设计思想2. 核心代码实现 总结 一、实验背景与目的 这次实验主要是为了让大家了解基于 WSAAsyncSelect 模型通信程序的编写、编译和执行过程。通过实践操作&#xff0c;深入掌握这种模型在实现计算机之间通信时的应用。 …

JAVA:利用 Apache Tika 提取文件内容的技术指南

1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…

数码管静态显示一位字符(STC89C52单片机)

#include <reg52.h> sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; //用数组来存储数码管的真值表&#xff0c;数组将在下一章详细介绍 unsigned char code LedChar[] { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82…