㈠ 帮忙写一个算法,用c语言
数值下标是从0开始的,array[0...5,0...7]
(1)数组A的体积=6(行)×8(列)×6(字节)=288(字节)
(2)数组A的最后一个元素a57的第一个字节的地址:
LOC(5,7)=LOC(0,0)+ ( 5×8+7 )×6 = 1000 (基地址)+ 282 = 1282
(3)按行存储时,元素a14的第一个字节的地址:
LOC( 1,4 ) = LOC( 0,0 ) + ( 1×8+4 )×6 = 1000 + 72 = 1072
(4)按列存储时,元素嗄7的第一个字节的地址:
LOC( 4,7 ) = LOC( 0,0 ) + ( 7×6+4 )×6 = 1000 + 276 = 1276
㈡ 在线求一个c语言算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define null 0
typedef struct element {//栈的节点
char data;//数据区域
element* next;//后继结点指针
element* prev;//前驱结点指针
};
typedef struct Stack{//栈
element* head;//头结点
element* tail;//尾节点
int length;//栈的长度
};
element* getElement() {//获取一个栈的节点
element* e = (element*)malloc(sizeof(element));//这里最好用element* e = new element;如果你的编译器支持C++的话建议换成注释里的写法
e->next = null;
e->prev = null;
e->data = null;
return e;
}
Stack* getStack() {//获取一个栈的结构体
Stack* stack = (Stack*)malloc(sizeof(Stack));//这里最好用Stack* stack = new Stack
element* e = getElement();
stack->head = e;
stack->tail = e;
stack->length = 0;
return stack;
}
void push(Stack* stack, char data) {//插入数据
element* e = getElement();
stack->tail->next = e;
e->next = null;
e->data = data;
e->prev = stack->tail;
stack->tail = e;
stack->length++;
}
char pop(Stack* stack) {//取出数据
if (stack->length <= 0) {
printf("没有数据可取,栈空了");
return null;
}
element* e = stack->tail;
char result = e->data;
stack->tail = stack->tail->prev;
stack->tail->next = null;
free(e);
stack->length--;
return result;
}
int main() {
char buffer[256];
Stack* stack = getStack();
printf("请输入字符序列:");
scanf("%s",buffer);
for (int i = 0; i < strlen(buffer); i++) {
push(stack, buffer[i]);//将字符一次推进栈中
}
for (int i = 0; i < strlen(buffer); i++) {
printf("%c",pop(stack));//将字符依次从栈中取出
}
return 0;
}
运行结果截图
㈢ 用c语言写算法
直接手写
size_t lenT, lenP, lenS;
char *e;
if ( !T || !P || !S ) return;
e = strstr( T, P );
if ( !e ) return;
lenT = strlen( T );
lenP = strlen( P );
lenS = strlen( S );
memmove( e+lenS, e+lenP, lenT+1-(e-T)-lenP );
memcpy( e, s, lenS );
假定三个长度 t、p、s 。
strstr: O(t*p)
strlen*3: O(t+p+s)
memmove: O(t-p)
memcpy:O(s)
最终复杂度 O(t*p+2(t+s)) -> O(n^2)。
可以看出热点在 strstr 函数。
如果将其通过 kmp 或类似的匹配算法优化成 O(n) 的,那么复杂度可以直接降为 O(n) 。
㈣ 求一个C语言的算法,最近脑袋不够用了。
比如,仿第3/4周期的正弦曲线来取current_value值:Y=Asin(ωX+φ),其中Y为current_value的取值,X是第X次取值;A、ω、φ都均可通过自己喜好的曲线峰值、斜率、相位等信息确定。该曲线的起点是0xFFFF FFFF,终点是target_value 。
当然,你也可以不用正弦曲线,也可以换成其他的,如:反抛物线的前半段之类的。
㈤ c语言算法有哪些
这里整理c语言常用算法,主要有:
交换算法
查找最小值算法
冒泡排序
选择排序
插入排序
shell排序 (希尔排序)
归并排序
快速排序
二分查找算法
查找重复算法