mirror of
https://github.com/lWolvesl/leetcode.git
synced 2026-01-12 18:08:38 +08:00
init
This commit is contained in:
16
we/23-1.h
Normal file
16
we/23-1.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#include <string.h>
|
||||
|
||||
int countSubstring(char *A,char *B){
|
||||
int count = 0;
|
||||
char *p = A;
|
||||
while(*p != '\0'){
|
||||
p = strstr(p,B);
|
||||
if(p != NULL){
|
||||
count++;
|
||||
p += strlen(B);
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
60
we/23-2.h
Normal file
60
we/23-2.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct ListNode {
|
||||
char *val;
|
||||
int count;
|
||||
struct ListNode *next;
|
||||
};
|
||||
|
||||
struct ListNode *initNode(char *val) {
|
||||
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
|
||||
node->val = val;
|
||||
node->next = NULL;
|
||||
return node;
|
||||
}
|
||||
|
||||
// 返回值带头节点
|
||||
struct ListNode *process(const char *fileName){
|
||||
struct ListNode *head = initNode("");
|
||||
|
||||
FILE *fp = fopen(fileName, "r");
|
||||
if(fp == NULL) {
|
||||
printf("open file failed\n");
|
||||
return head;
|
||||
}
|
||||
|
||||
char buffer[1024];
|
||||
char *words[1000];
|
||||
int wordCount = 0;
|
||||
|
||||
while (fscanf(fp, "%s", buffer) != EOF && wordCount < 1000) {
|
||||
words[wordCount] = strdup(buffer); // 使用 strdup 复制字符串
|
||||
wordCount++;
|
||||
}
|
||||
|
||||
int tag = 0; // 0 表示还没有处理,1 表示已经处理
|
||||
|
||||
for (int i = 0; i < wordCount; i++) {
|
||||
struct ListNode *p = head;
|
||||
tag = 0;
|
||||
while(p->next != NULL) {
|
||||
if(strcmp(p->next->val, words[i]) == 0){
|
||||
p->next->count++;
|
||||
tag = 1;
|
||||
break;
|
||||
}
|
||||
p = p->next;
|
||||
}
|
||||
if(tag == 0) {
|
||||
struct ListNode *node = initNode(words[i]);
|
||||
node->count = 1;
|
||||
p->next = node;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
||||
return head;
|
||||
}
|
||||
86
we/23-3.c
Normal file
86
we/23-3.c
Normal file
@@ -0,0 +1,86 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct student{
|
||||
int stuId;
|
||||
char *name;
|
||||
int score;
|
||||
};
|
||||
|
||||
void inputData(struct student *s, int size){
|
||||
for(int i = 0; i < size; i++){
|
||||
printf("请输入第%d个学生的学号、姓名、成绩:", (i + 1));
|
||||
printf("学生学号:");
|
||||
scanf("%d", &s[i].stuId);
|
||||
s[i].name = (char *)malloc(50 * sizeof(char));
|
||||
if (s[i].name == NULL)
|
||||
{
|
||||
printf("内存分配失败\n");
|
||||
}
|
||||
|
||||
printf("学生姓名:");
|
||||
scanf("%s", s[i].name);
|
||||
printf("学生成绩:");
|
||||
scanf("%d", &s[i].score);
|
||||
}
|
||||
}
|
||||
|
||||
void bubbleSort(struct student *s, int size){
|
||||
for(int i = 0;i<size;i++){
|
||||
for(int j = 0;j<size-i-1;j++){
|
||||
if(s[j].score > s[j+1].score){
|
||||
struct student temp = s[j];
|
||||
s[j] = s[j+1];
|
||||
s[j+1] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct student *findScore(struct student *s, int size, int score){
|
||||
int left = 0;
|
||||
int right = size - 1;
|
||||
int mid;
|
||||
while(left <= right){
|
||||
mid = left + (right - left) / 2;
|
||||
if(s[mid].score == score){
|
||||
return &s[mid];
|
||||
}else if (s[mid].score > score){
|
||||
right = mid - 1;
|
||||
}else
|
||||
{
|
||||
left = mid + 1;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int main(){
|
||||
int size;
|
||||
printf("请输入学生人数:");
|
||||
scanf("%d",&size);
|
||||
struct student *s = (struct student *)malloc(sizeof(struct student)*size);
|
||||
inputData(s, size);
|
||||
bubbleSort(s, size);
|
||||
for(int i = 0;i<size;i++){
|
||||
printf("学号:%d,姓名:%s,成绩:%d\n", s[i].stuId, s[i].name, s[i].score);
|
||||
}
|
||||
printf("请输入要查找学生的成绩:");
|
||||
int score;
|
||||
scanf("%d",&score);
|
||||
struct student *p = findScore(s, size, score);
|
||||
if(p == NULL){
|
||||
printf("未找到此成绩的学生\n");
|
||||
}else{
|
||||
printf("学号:%d,姓名:%s,成绩:%d\n",p->stuId,p->name,p->score);
|
||||
}
|
||||
|
||||
for (int i = 0; i < size; i++)
|
||||
{
|
||||
free[s[i].name];
|
||||
}
|
||||
|
||||
free(s);
|
||||
|
||||
return 0;
|
||||
}
|
||||
73
we/23-4.c
Normal file
73
we/23-4.c
Normal file
@@ -0,0 +1,73 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct Toy
|
||||
{
|
||||
int val; // 玩具的编号
|
||||
struct Toy *next;
|
||||
};
|
||||
|
||||
void print(struct Toy *head){
|
||||
struct Toy *temp = head->next;
|
||||
while(temp != NULL){
|
||||
printf("%d-",temp->val);
|
||||
temp = temp->next;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
struct Toy *createToy(int val){
|
||||
struct Toy *t = (struct Toy *)malloc(sizeof(struct Toy));
|
||||
if(t == NULL){
|
||||
return NULL;
|
||||
}
|
||||
t->val = val;
|
||||
return t;
|
||||
}
|
||||
|
||||
bool init(struct Toy *head){
|
||||
struct Toy *temp = head;
|
||||
for(int i = 1;i<=10;i++){
|
||||
temp->next = createToy(i);
|
||||
temp = temp->next;
|
||||
if(temp == NULL){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void game(struct Toy *head,int val){
|
||||
struct Toy *temp = head;
|
||||
while (temp->next != NULL)
|
||||
{
|
||||
if(temp->next->val == val){
|
||||
break;
|
||||
}
|
||||
temp = temp->next;
|
||||
}
|
||||
|
||||
struct Toy *t = temp->next;
|
||||
temp->next = t->next;
|
||||
t->next = head->next;
|
||||
head->next = t;
|
||||
}
|
||||
|
||||
int main(){
|
||||
struct Toy *head = createToy(-1); //头节点
|
||||
if(head == NULL){
|
||||
printf("malloc fail\n");
|
||||
return -1;
|
||||
}
|
||||
bool in = init(head);
|
||||
if(in == false){
|
||||
printf("init fail\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
print(head);
|
||||
|
||||
game(head,3); // 骰子数为3
|
||||
print(head);
|
||||
return 0;
|
||||
}
|
||||
26
we/24-1.h
Normal file
26
we/24-1.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#include <math.h>
|
||||
|
||||
int getN(long int a){
|
||||
int ret = 0;
|
||||
while (a)
|
||||
{
|
||||
ret++;
|
||||
a/=10;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
long int findMO(long int a){
|
||||
int ret = 0;
|
||||
int i = 0;
|
||||
int n = getN(a);
|
||||
while(a!=0){
|
||||
int div = pow(10,n--);
|
||||
int temp = a/div;
|
||||
a%=div;
|
||||
if(temp%2 == 1){
|
||||
ret += temp*(int)pow(10,i++);
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
33
we/24-2.h
Normal file
33
we/24-2.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
char* destar(char *str){
|
||||
int length = strlen(str);
|
||||
char *ret = (char *)malloc(sizeof(char)*length);
|
||||
if(ret == NULL){
|
||||
return "error";
|
||||
}
|
||||
int left=0,right=length-1;
|
||||
while (str[left++]=='*');
|
||||
while (str[right--]=='*');
|
||||
strncpy(ret,str,left);
|
||||
char temp;
|
||||
int i = left;
|
||||
while (left<=right)
|
||||
{
|
||||
temp = str[left++];
|
||||
if((temp >= 'a' && temp <= 'z') ||
|
||||
(temp >= 'A' && temp <= 'Z')) {
|
||||
ret[i++] = temp;
|
||||
}else if(temp=='*'){
|
||||
continue;
|
||||
}else{
|
||||
free(ret);
|
||||
return "error";
|
||||
}
|
||||
}
|
||||
strncpy(ret+i,str+right+1,length - (right + 1));
|
||||
ret[length - (left - i)] = '\0';
|
||||
|
||||
return ret;
|
||||
}
|
||||
25
we/24-3.h
Normal file
25
we/24-3.h
Normal file
@@ -0,0 +1,25 @@
|
||||
struct List{
|
||||
int val;
|
||||
struct List * next;
|
||||
};
|
||||
|
||||
void bubbleListSort(List *head) {
|
||||
if (head == nullptr) return; // 空链表检查
|
||||
|
||||
List *temp2;
|
||||
int temp;
|
||||
bool swapped;
|
||||
do {
|
||||
swapped = false;
|
||||
temp2 = head;
|
||||
while (temp2->next) {
|
||||
if (temp2->next->val < temp2->val) {
|
||||
temp = temp2->val;
|
||||
temp2->val = temp2->next->val;
|
||||
temp2->next->val = temp;
|
||||
swapped = true;
|
||||
}
|
||||
temp2 = temp2->next;
|
||||
}
|
||||
} while (swapped); // 如果没有发生交换,提前结束
|
||||
}
|
||||
114
we/24-4.h
Normal file
114
we/24-4.h
Normal file
@@ -0,0 +1,114 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
int find(char **species,int size,char *str){
|
||||
for(int i = 0; i<size;i++){
|
||||
if (strcmp(species[i], str) == 0)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
// 传入咒语字符串数组(二维数组)eg. {{"猫","alal","鱼"},{x,x,x}} 代表猫变老鼠咒语为"alal"
|
||||
|
||||
char *find_best_animal(char ***curses, int cursesSize)
|
||||
{
|
||||
char **species = (char **)malloc(sizeof(char *) * 2 * cursesSize);
|
||||
if(species == NULL){
|
||||
return "error,fail to malloc memory";
|
||||
}
|
||||
int size = 0;
|
||||
for(int i = 0;i<cursesSize;i++){ //统计个数并建立映射关系,时间复杂度为o(n^2),使用哈希表(c语言哈希表篇幅过长)可以降到o(1)
|
||||
for(int j=0;j<3;j++){
|
||||
if(j==1){
|
||||
continue;
|
||||
}
|
||||
if(find(species,size,curses[i][j])==-1){
|
||||
species[size++]=curses[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int **matrix = (int**)malloc(sizeof(int*) * size); // 准备空间以便后续弗洛伊德操作
|
||||
if(matrix == NULL){
|
||||
return "error,fail to malloc memory";
|
||||
}
|
||||
for(int i = 0; i < size; i++){
|
||||
matrix[i] = (int*)malloc(sizeof(int) * size);
|
||||
if(matrix[i] == NULL){
|
||||
// 释放之前分配的内存
|
||||
for(int j = 0; j < i; j++){
|
||||
free(matrix[j]);
|
||||
}
|
||||
free(matrix);
|
||||
return "error,fail to malloc memory";
|
||||
}
|
||||
// 初始化数组元素为-1
|
||||
memset(matrix[i], -1, sizeof(int) * size);
|
||||
}
|
||||
|
||||
for(int i=0;i<cursesSize;i++){
|
||||
int x = find(species,size,curses[i][0]);
|
||||
int y = find(species,size,curses[i][2]);
|
||||
int len = strlen(curses[i][1]);
|
||||
|
||||
// 保留最短路径
|
||||
if(matrix[x][y] == -1 || len < matrix[x][y]) {
|
||||
matrix[x][y] = len;
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0;i<size;i++){ // 实现弗洛伊德操作
|
||||
for(int j = 0;j<size;j++){
|
||||
if(j==i || matrix[j][i] == -1){
|
||||
continue;
|
||||
}
|
||||
for(int k = 0;k<size;k++){
|
||||
if(k==i || matrix[i][k] == -1 || j==k){
|
||||
continue;
|
||||
}
|
||||
|
||||
// 更新最短路径
|
||||
if(matrix[j][k] == -1 || matrix[j][i] + matrix[i][k] < matrix[j][k]) {
|
||||
matrix[j][k] = matrix[j][i] + matrix[i][k];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int res = -1;
|
||||
int min = INT_MAX;
|
||||
for(int i = 0;i<size;i++){
|
||||
int cost = 0;
|
||||
int valid = 1;
|
||||
for(int j = 0;j<size;j++){
|
||||
if(i != j){
|
||||
if(matrix[i][j] == -1){
|
||||
valid = 0;
|
||||
break;
|
||||
}
|
||||
cost += matrix[i][j];
|
||||
}
|
||||
}
|
||||
if(valid && min > cost){
|
||||
min = cost;
|
||||
res = i;
|
||||
}
|
||||
}
|
||||
|
||||
// 释放内存
|
||||
for(int i = 0; i < size; i++){
|
||||
free(matrix[i]);
|
||||
}
|
||||
free(matrix);
|
||||
|
||||
char *animal = res != -1 ? species[res] : NULL;
|
||||
|
||||
free(species);
|
||||
|
||||
return animal;
|
||||
}
|
||||
14
we/24-sy-1.c
Normal file
14
we/24-sy-1.c
Normal file
@@ -0,0 +1,14 @@
|
||||
#include <stdbool.h>
|
||||
|
||||
bool isPalindrome(char *s){
|
||||
int len = strlen(s);
|
||||
int left = 0, right = len - 1;
|
||||
while (left < right) {
|
||||
if (s[left] != s[right]) {
|
||||
return false;
|
||||
}
|
||||
left++;
|
||||
right--;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
36
we/24-sy-2.c
Normal file
36
we/24-sy-2.c
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
struct ListNode
|
||||
{
|
||||
int val;
|
||||
struct ListNode *next;
|
||||
};
|
||||
|
||||
|
||||
// 带头节点的单链表插入排序
|
||||
void insertSort(struct ListNode *head){
|
||||
struct ListNode *p = head->next;
|
||||
struct ListNode *q;
|
||||
|
||||
if (p == NULL || p->next == NULL) return; // 空链表或单节点无需排序
|
||||
|
||||
while(p->next) {
|
||||
q = head;
|
||||
while (q->next != p->next) {
|
||||
if(q->next->val < p->next->val) {
|
||||
q = q->next;
|
||||
} else {
|
||||
// 插入操作
|
||||
struct ListNode *temp = p->next;
|
||||
p->next = temp->next;
|
||||
temp->next = q->next;
|
||||
q->next = temp;
|
||||
break; // 插入完成后立即跳出
|
||||
}
|
||||
}
|
||||
// 只有没发生插入时才移动p指针
|
||||
if (q->next == p->next) {
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
18
we/24-sy-3.c
Normal file
18
we/24-sy-3.c
Normal file
@@ -0,0 +1,18 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
char *strcpys(char *dest,char *src){
|
||||
int len1 = strlen(dest);
|
||||
int len2 = strlen(src);
|
||||
char *res = (char *)malloc(sizeof(char)*(len1+len2+1));
|
||||
if(!res){
|
||||
printf("malloc failed\n");
|
||||
return NULL;
|
||||
}
|
||||
memcpy(res,dest,len1);
|
||||
memcpy(res+len1,src,len2);
|
||||
res[len1+len2] = '\0';
|
||||
|
||||
free(src);
|
||||
return res;
|
||||
}
|
||||
Reference in New Issue
Block a user