zoukankan      html  css  js  c++  java
  • 关于动态内存和输入输出文件

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

    这里仍记录以下今天借阅的这本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]=='') 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;
    }
  • 相关阅读:
    go基础_defer
    go基础_函数
    go基础_控制语句
    go基础_数组
    go基础_切片
    go命令行参数
    Hdu2795Billboard线段树
    Hdu1394Minimum Inversion Number线段树
    Hdu1754单点更新
    Hdu1166单点更新线段树
  • 原文地址:https://www.cnblogs.com/ubiwind/p/5558320.html
Copyright © 2011-2022 走看看