串的置换操作Replace(&S,T,V)的算法

编写一个实现串的置换操作Replace(&S,T,V)的算法。
StringType是串的一个抽象数据类型,它包含以下6种基本操作:
void InitStr(StringType &s);
  // 初始化s为空串。
void StrAssign(StringType &t, StringType s);
  // 将s的值赋给t。s的实际参数是串变量。
int StrCompare(StringType s, StringType t);
  // 比较s和t。若s>t,返回值>0;若s=t,返回值=0;若s<t,返回值<0。
int StrLength(StringType s);
  // 返回s中的元素个数,即该串的长度。
StringType Concat(StringType &s, StringType t); 
  // 返回由s和t联接而成的新串。
StringType SubString(StringType s, int start, int len);
  // 当1<=start<=StrLength(s)且0<=len<=StrLength(s)- start+1时,
  // 返回s中第start个字符起长度为len的子串,否则返回空串。

实现函数如下:

void Replace(StringType &S, StringType T, StringType V)
/* 以串 v 置换串 s 中出现的所有和串 t 相同的非空串  */
{   
    int n,m,k,i;
    StringType sub;
    InitStr(sub);   
    n = StrLength(S);
    m = StrLength(T);
    k = StrLength(V);
    i = 1;
    while(i <= n-m+1){
        StrAssign(sub,SubString(S,i,m));//将串C中的子串逐个提取出来与串T进行匹配
        if(StrCompare(sub,T) == 0){//匹配相等时
            InitStr(sub);
            Concat(sub,SubString(S,1,i-1));//将匹配相等的子串的前面的子串连接到串sub后
            Concat(sub,V);//将替换串连接到串sub后
            Concat(sub,SubString(S,m+i,n-(m+i)+1));//将匹配相等的子串的后面的子串连接到串sub后
            StrAssign(S,sub);
            i += k;
            n = StrLength(S);//操作完一次之后,串S已经改变,需要注意
        }
        else{
            ++i;
        }
    }    
}

  • 24
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
最佳置换算法是一种页面置换算法,其思想是查找内存中将来最长时间不使用的页面,然后将当前页面替换成该页面。以下是最佳置换算法的编程实现。 首先,我们需要定义一个列表来存储当前内存中的页面和它们的访问时间。每当页面被访问时,我们需要更新它的访问时间。 ``` # 定义列表来存储页面和它们的访问时间 memory = [] # 初始化内存 def initialize_memory(size): global memory memory = [[None, float("inf")] for _ in range(size)] # 更新页面的访问时间 def update_access_time(page): global memory for i in range(len(memory)): if memory[i][0] == page: memory[i][1] = float("inf") else: memory[i][1] -= 1 # 查找最长时间不使用的页面 def find_replace_page(): global memory replace_page = None for page, access_time in memory: if access_time < float("inf"): if replace_page is None or access_time > memory[replace_page][1]: replace_page = memory.index([page, access_time]) return replace_page ``` 然后,我们需要实现最佳置换算法的主要逻辑。当内存已满且新页面需要插入时,我们需要查找最长时间不使用的页面并将其替换成新页面。 ``` # 最佳置换算法 def best_fit(page): global memory if [page, float("inf")] not in memory: page_index = None for i in range(len(memory)): if memory[i][0] is None: memory[i] = [page, float("inf")] return elif memory[i][0] == page: update_access_time(page) return elif page_index is None or memory[i][1] > memory[page_index][1]: page_index = i memory[page_index] = [page, float("inf")] else: update_access_time(page) # 页面替换 def page_replace(algo, pages, size): global memory initialize_memory(size) page_faults = 0 for page in pages: if page not in [p[0] for p in memory]: page_faults += 1 if None in [p[0] for p in memory]: memory[[p[0] for p in memory].index(None)] = [page, float("inf")] else: replace_page_index = find_replace_page() memory[replace_page_index] = [page, float("inf")] else: update_access_time(page) return page_faults ``` 最后,我们可以调用 `page_replace` 函数来测试最佳置换算法。 ``` pages = [7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2] print("Page faults:", page_replace("best_fit", pages, 4)) ``` 输出结果为: ``` Page faults: 7 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值