关于动态内存和输入输出文件

Posted [6G]蓝色の云风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于动态内存和输入输出文件相关的知识,希望对你有一定的参考价值。

最近和师兄的课题交流,特别是这两天重点集中到实践上。动态分配存储空间和输入输出文件无疑是非常重要的。

这里仍记录以下今天借阅的这本C++给出的一些例子:

动态内存的模拟

struct memo{
    int start;
    int finish;
    memo* next;
};

void arrange(memo* memo)
{
    memo* insPos = head, *curPos, *minPos;
    while(insPos->next != NULL){    //直接插入排序
        curPos = minPos = insPos;
        while(curPos->next = NULL){ //找起始地址最小的结点
            if(curPos->next->start<minPos->next->start)
                minPos = curPos;
            curPos = curPos -> next;
        }
        //插入最小节点
        curPos = minPos -> next;
        minPos -> next = curPos -> next;
        curPos -> next = insPos -> next;
        insPos -> next = curPos;
        intPos = insPos -> next;
    }
    //合并连续的内存块
   for(curPos = head -> next; curPos -> next !=NULL; curPos = curPos -> next){
    //当前块与下一块连续,执行合并
   while(curPos->finish + 1 == curPos->next->start){
        minPos=curPos->next;
        curPos->finish=minPos->finish;
        curPos->next=minPos->next;
        delete minPos;
        if(curPos->next==NULL)return;
    }
}

另外一个非常实用的程序:统计一个文件中单词使用的频率

 #include <iostream>
 #include <iomanip>
 #include <fstream>
 using namespace std;
 
 struct word{
     char data[20];
     int count;
 };
 
 void getWord(ifstream &fp, char ch[]);     //从文件中读入一单词
 void doubleSpace(word* &list, int &size); //扩大数组空间
 
 int main()
 {
     ifstream in("txt.txt");
     char ch[20];
     int size = 10, len = 0, i, j;
     word* result = new word[10];
     
     if(!in){cout <<"文件打开错误"<<endl;return 1;}
     while(true){                  //读文件直到结束
         getWord(in, ch);        //读入一个单词ch
         if(ch[0]==\0) break;
         for(i = 0; i < len; ++i)
             if(strcmp(result[i].data, ch) >= 0) break;
         if(i < len && strcmp(result[i].data, ch) == 0){
             result[i].count += 1;
             coutinue;
         }
         if(size == len) doubleSpace(result, size);
         for(j = len++; j > i; --j)    result[j] = result[j-1];
         strcpy(result[i].data, ch);
         result[i].count = 1;
     }
     for(i = 0; i < len; ++i)
        cout << stw(20) << elft << result[i].data << setw(5) << result[i].count << endl;
     in.close();
     cin >> ch[0];
     return 0;
}

 

以上是关于关于动态内存和输入输出文件的主要内容,如果未能解决你的问题,请参考以下文章

每日一练5

C++学习笔记:高级编程:文件和流,异常处理,动态内存,命名空间

关于IO流中的输入流输出流的理解

动态内存分配php

片段(Java) | 机试题+算法思路+考点+代码解析 2023

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段