#include <stdio.h> #include <stdlib.h> #include <string.h> #include "search.h" int Search_Seq(SSTable L, KeyType key) {/*在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0*/ // 请在这里补充代码,完成本关任务 /********** Begin *********/ /********** End **********/ } void SSTableInput(SSTable &L) /*输入若干记录的关键字,存放到静态查找表L中*/ { int i=1; KeyType x; scanf("%d",&x); while(x!=-1) { L.r[i++].key=x; scanf("%d",&x); } L.length=i-1; } void SSTableOutput(SSTable L) /*输出静态查找表L中各记录的关键字*/ { int i; for(i=1;i<=L.length;i++) printf("%d ",L.r[i].key); printf("\n"); }
时间: 2023-07-23 10:56:41 浏览: 81
这段代码是实现了一个静态查找表,其中包括了以下函数:
1. `Search_Seq(SSTable L, KeyType key)`:在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0。
2. `SSTableInput(SSTable &L)`:输入若干记录的关键字,存放到静态查找表L中。
3. `SSTableOutput(SSTable L)`:输出静态查找表L中各记录的关键字。
其中,`SSTable` 是一个结构体,包含了以下成员变量:
- `r`:记录数组,存放静态查找表中的记录。
- `length`:记录数组中记录的个数。
另外,该段代码中包含了头文件 `search.h`,但没有提供该头文件的内容,因此无法确定其中定义了哪些类型和函数。
相关问题
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "search.h" int Search_Seq(SSTable L, KeyType key) {/*在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0*/ // 请在这里补充代码,完成本关任务 /********** Begin *********/ /********** End ***
以下是完整的代码实现,包括注释:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "search.h"
int Search_Seq(SSTable L, KeyType key) {
/*在静态查找表L中采用顺序查找法,查找其关键字等于key的记录,若找到返回该记录在表中位置,否则返回0*/
int i;
for (i = 1; i <= L.length; i++) { // 依次遍历表中的每个元素
if (EQ(key, L.elem[i].key)) { // 如果找到了与key相等的元素
return i; // 返回该元素在表中的位置
}
}
return 0; // 如果遍历完整个表都没有找到与key相等的元素,则返回0
}
```
仔细观察代码,可以发现:
- 函数的返回值是int类型,表示该元素在表中的位置,如果找不到则返回0。
- 函数的参数有两个,分别是SSTable类型的静态查找表L和KeyType类型的关键字key。
- 函数中使用了for循环遍历表中的每个元素,如果找到了与key相等的元素,则返回该元素在表中的位置。
- 判断元素是否相等的方法是调用了EQ宏定义,EQ的定义可以在search.h头文件中找到。
需要注意的是,这个顺序查找算法只适用于静态查找表,即表中的数据不发生变化,否则需要重新建立查找表。
写一个H264的RTP完整代码
答案:H264 RTP完整代码如下:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <fcntl.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <inttypes.h>#define MAX_BUF_SIZE 1024//帧类型定义
#define NALU_TYPE_SLICE 1
#define NALU_TYPE_DPA 2
#define NALU_TYPE_DPB 3
#define NALU_TYPE_DPC 4
#define NALU_TYPE_IDR 5
#define NALU_TYPE_SEI 6
#define NALU_TYPE_SPS 7
#define NALU_TYPE_PPS 8
#define NALU_TYPE_AUD 9
#define NALU_TYPE_EOSEQ 10
#define NALU_TYPE_EOSTREAM 11
#define NALU_TYPE_FILL 12//RTP头部
typedef struct
{
//byte 0
unsigned char csrc_len:4; //CSRC的长度
unsigned char extension:1; //是否有扩展
unsigned char padding:1; //是否有填充
unsigned char version:2; //版本号 //byte 1
unsigned char payload:7; //负载类型
unsigned char marker:1; //标记位 //byte 2,3
unsigned short seq_no; //序号 //byte 4-7
unsigned long timestamp; //时间戳 //byte 8-11
unsigned long ssrc; //同步源标识符
} RTP_FIXED_HEADER;//NALU前缀
typedef struct
{
//byte 0
unsigned char TYPE:5; //NALU类型
unsigned char NRI:2; //NALU优先级
unsigned char F:1; //是否有起始前缀} NALU_HEADER;//FU INDICATOR
typedef struct
{
//byte 0
unsigned char TYPE:5; //FU INDICATOR的类型
unsigned char NRI:2; //NALU优先级
unsigned char F:1; //是否有起始前缀} FU_INDICATOR;//FU HEADER
typedef struct
{
//byte 0
unsigned char TYPE:5; //FU HEADER的类型
unsigned char R:1; //是否有起始前缀
unsigned char E:1; //是否有结束前缀
unsigned char S:1; //是否为第一个分片} FU_HEADER;//RTP发送函数
void send_rtp_packet(int sock,unsigned char *buf,int len,unsigned long timestamp)
{
int head_len = 12; //固定头部长度
int send_len; //头部部分
unsigned char rtp_head[head_len];
RTP_FIXED_HEADER *rtp_hdr;
rtp_hdr = (RTP_FIXED_HEADER *)rtp_head; //RTP固定头部
rtp_hdr->version = 2;
rtp_hdr->payload = 96; //发送H264数据,其值为96
rtp_hdr->seq_no = htons(1); //序列号,每发送一个RTP包增1
rtp_hdr->timestamp = htonl(timestamp); //时间戳,每发送一个RTP包更新
rtp_hdr->ssrc = htonl(1); //源标识符,可以自定义 //NALU前缀
NALU_HEADER *nalu_hdr;
nalu_hdr = (NALU_HEADER *)(buf); //FU INDICATOR
FU_INDICATOR *fu_ind;
fu_ind = (FU_INDICATOR *)(buf); //FU HEADER
FU_HEADER *fu_hdr;
fu_hdr = (FU_HEADER *)(buf + 1); //发送一个完整NALU
if(nalu_hdr->F == 0)
{
memcpy(rtp_head+head_len,buf,len);
send_len = head_len + len;
send(sock,rtp_head,send_len,0);
} //分片NALU
else if(nalu_hdr->F == 1)
{
//发送FU INDICATOR
rtp_head[head_len] = fu_ind->F | fu_ind->NRI << 5 | fu_ind->TYPE << 5;
send_len = head_len + 1;
send(sock,rtp_head,send_len,0); //发送FU HEADER
rtp_head[head_len] = fu_hdr->S | fu_hdr->E << 1 | fu_hdr->R << 2 | fu_hdr->TYPE << 5;
send_len = head_len + 1;
send(sock,rtp_head,send_len,0); //发送分片NALU
memcpy(rtp_head+head_len,buf+2,len-2);
send_len = head_len + len - 2;
send(sock,rtp_head,send_len,0);
}
}
阅读全文