赞
踩
快速的过一遍数据结构中的串、数组、广义表,
顾名思义,串也称字符串,不过在数据结构里面处理的串和常规的字符串不一样,这里吧字符串当成一个整体进行处理:例如,在串中查找某个子串,求取一个子串,在串的某个位置上插入一个子串,以及删除一个子串等
主要是有:串的定长存储结构、和串的串的堆式顺序存储结构
#include <stdio.h> #include <string.h> int bfMatching(char *mainStr, char *patternStr) { int mainLen = strlen(mainStr); int patternLen = strlen(patternStr); for (int i = 0; i < mainLen - patternLen + 1; i++) { if (strncmp(mainStr + i, patternStr, patternLen) == 0) { // 找到匹配返回起始位置 return i; } } // 未找到匹配返回 -1 return -1; } int main() { char mainStr[] = "hello world example this is a example"; char patternStr[] = "example"; int result = bfMatching(mainStr, patternStr); if (result != -1) { printf("模式串在主串中首次出现的位置是:%d\n", result); } else { printf("未找到模式串\n"); } return 0; }
结果:
#include <stdio.h> #include <string.h> #include <stdlib.h> #define MAX_SIZE 255 typedef struct HString { char zfc[MAX_SIZE]; int length; } HString; // 获取 next 数组(部分匹配表) void Get_Next(HString child, int *next) { int i = 0, j = -1; next[0] = -1; while (i < child.length) { if (j == -1 || child.zfc[i] == child.zfc[j]) { i++; j++; if (child.zfc[i] != child.zfc[j]) { next[i] = j; } else { next[i] = next[j]; } } else { j = next[j]; } } } // 模式匹配函数 int bfMatching(char *mainStr, char *patternStr) { HString parents; HString child; strcpy(parents.zfc, mainStr); parents.length = strlen(mainStr); strcpy(child.zfc, patternStr); child.length = strlen(patternStr); int *next = (int *)malloc(child.length * sizeof(int)); Get_Next(child, next); int i = 0, j = 0; while (i < parents.length) { if (j == -1 || parents.zfc[i] == child.zfc[j]) { i++; j++; } else { j = next[j]; } if (j == child.length) { free(next); return i - j; } } free(next); return -1; } int main() { char mainStr[] = "hello world example this is a example"; char patternStr[] = "example"; int result = bfMatching(mainStr, patternStr); if (result != -1) { printf("模式串在主串中首次出现的位置是:%d\n", result); } else { printf("未找到模式串\n"); } return 0; }
结果:
主要是有数组类型定义,顺序存储结构,下标计算,对于数组而言,其下标之间的关系是一种线性关系,无论是几维数组
例如一些对称矩阵,我们不用把所有元素都存储,利用对称矩阵的性质,n阶矩阵只用存n(n+1)/2个数,而不用存n^2个数,还有一些其他的特殊矩阵和规则可以利用。
顾名思义,广义表是线性表的推广,也称为列表。广泛地用千人工智能等领域的表处理语言LISP语言,把广义表作为基本的数据结构,就连程序也表示为一系列的广义表。
广义表的定义是一个递归的定义,因为在描述广义表时又用到了广义表的概念。下面 列举一些广义表的例子
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。