码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-06-04 11:49:10      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

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

这里仍记录以下今天借阅的这本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;
}

 

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

标签:

原文地址:http://www.cnblogs.com/ubiwind/p/5558320.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!