㈠ 幫忙寫一個演算法,用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排序 (希爾排序)
歸並排序
快速排序
二分查找演算法
查找重復演算法