当前位置:首页 » 编程语言 » 一个普通的c语言算法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

一个普通的c语言算法

发布时间: 2023-03-01 22:13:49

㈠ 帮忙写一个算法,用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排序 (希尔排序)
归并排序
快速排序
二分查找算法
查找重复算法