當前位置:首頁 » 編程語言 » 一個普通的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排序 (希爾排序)
歸並排序
快速排序
二分查找演算法
查找重復演算法