
using namespace std
#include<stdio.h>
class person
{ public:
char name[10],sex[4],tel[11],add[20],postnum[10],e_mail[20],QQ[11],kind[10]//kind 类别:朋友,同学...
public:
person()
{}
void input()
{ cout<<"请输入 名字,性别,电话,地址,邮政编码 邮箱 QQ 类别"<<endl
cin>>name>>sex>>tel>>add>>postnum>>e_mail>>QQ>>kind}
void save()
{ FILE *out
out=fopen("e:\\person.txt","a")
fprintf(out,"%s %s %s %s %s %s %s %s\n",name,sex,tel,add,postnum,e_mail,QQ,kind)
cout<<"信息已保存至 e:\\person.txt\n"
fclose(out)
}
void output()
{ cout<<name<<" "<<sex<<" "<<tel<<" "<<add<<" "<<postnum<<" "<<e_mail<<" "<<QQ<<" "<<kind<<endl
}
}
void main()
{ person people[30]int i,int num=0,p_num=0//num 输入的people 个数
do
{ cout<<"请输入0-5来选择\n 1 输入 2 查询 3 按姓名排序 4 按姓名,电话进行修改 5按姓名,电话进行删除 0 退出\n"
cin>>i
switch(i)
{ case 0:{}break
case 1://对信息进行 输入和保持至文件
{
people[p_num].input()people[p_num].save()num++p_num++
}break
case 2://查询
{ cout<<" 1 根据姓名查询\n 2 电拍链兆话\n 3 地址\n 4 类别 \n 5 所有\n"
int jcin>>唤梁j
switch(j)
{ case 1://姓名
{ cout<<"请输入您要查询的姓名: \n"
char q_name[20]cin>>q_namebool flag=false
for(int t=0t<numt++)
if(strcmp(people[t].name,q_name)==0)
{cout<<"姓名为:"<<q_name<<"的袭租信息如下:\n"people[t].output()flag=truebreak}
if(flag==false)cout<<"没有找到"<<q_name<<"的信息\n"
}break
case 2://电话
{ cout<<"请输入电话..."<<endl
char q_tel[11]cin>>q_telbool flag=false
for(int t=0t<numt++)
if(strcmp(people[t].tel,q_tel)==0)
{cout<<"电话为:"<<q_tel<<"的信息如下:\n"people[t].output()flag=truebreak}
if(flag==false)cout<<"没有找到"<<q_tel<<"的信息\n"
}break
case 3://地址
{ cout<<"请输入地址..."<<endl
char q_add[20]cin>>q_addbool flag=false
for(int t=0t<numt++)
if(strcmp(people[t].add,q_add)==0)
{cout<<"地址为:"<<q_add<<"的信息如下:\n"people[t].output()flag=true}
if(flag==false)cout<<"没有找到"<<q_add<<"的信息\n"
}break
case 4://类别
{ cout<<"请输入类别..."<<endl
char q_kind[20]cin>>q_kindbool flag=false
for(int t=0t<numt++)
if(strcmp(people[t].kind,q_kind)==0)
{cout<<"类别为:"<<q_kind<<"的信息如下:\n"people[t].output()flag=true}
if(flag==false)cout<<"没有找到"<<q_kind<<"的信息\n"
}break
case 5://所有人
{ cout<<" 所有人的信息如下:\n"
for(int t=0t<numt++)
people[t].output()
}break
default:
cout<<"您的输入有误"<<endlbreak
}}break
case 3://姓名排序
{ person sortint t
for( t=0t<numt++)
{for(int s=t+1s<nums++)//person类里的数据成员不是堆资源所以不用拷贝构造函数<br> if(strcmp(people[t].name,people[s].name)>0)<br> { <br> sort=people[t]people[t]=people[s]people[s]=sort<br> }
}
cout<<"按姓名从小到大排序后......"<<endl
for(int n=0n<numn++)
people[n].output()
}break
case 4://按姓名 电话 修改
{ cout<<" 请输入1-2 1 按姓名修改 2按电话修改\n"
int jcin>>j
switch(j)
{ case 1://姓名修改
{ cout<<"请输入您要修改的人的姓名:\n"
char s_name[20]cin>>s_name
for(int t=0t<numt++)
if(strcmp(people[t].name,s_name)==0)
{ person s_peoplecout<<"\n请依次输入修改后的信息:名字,性别,电话,地址,邮政编码 邮箱 QQ 类别\n"
s_people.input()
people[t]=s_peoplebreak
}
cout<<"修改成功.....\n"
}break
case 2://电话修改
{ cout<<"请输入您要修改的人的电话:\n"
char s_tel[20]cin>>s_tel
for(int t=0t<numt++)
if(strcmp(people[t].tel,s_tel)==0)
{ person s_people_tel
cout<<"\n请依次输入修改后的信息:名字,性别,电话,地址,邮政编码 邮箱 QQ 类别\n"
s_people_tel.input()
people[t]=s_people_telbreak
}
cout<<"修改成功.....\n"
}break
}
}break
case 5://按姓名 电话 删除
{ cout<<" 请输入1-2 1 按姓名删除 2按电话删除\n"
int jcin>>j
switch(j)
{ case 1://姓名删除
{ cout<<"请输入您要删除的人的姓名:\n"
char s_name[20]cin>>s_name
for(int t=0t<numt++)
if(strcmp(people[t].name,s_name)==0)
{ int j=t+1
for(jj<numj++)
{ people[t]=people[j]
t++
}
break
}
num--cout<<s_name<<" 已成功删除....\n"
}break
case 2://电话删除
{ cout<<"请输入您要删除的人的电话:\n"
char s_tel[20]cin>>s_tel
for(int t=0t<numt++)
if(strcmp(people[t].tel,s_tel)==0)
{ int j=t+1
for(jj<numj++)
{ people[t]=people[j]
t++
}
break
}
num--cout<<"删除成功....\n"
}break
}
}break
default:
break
}
}
while(i!=0)
}
interface bag{
public void add(Object thing)
public Object remove()
}
LIFO的
class LIFOBag implements Bag {
private Object[] stack
private int stackTop = 0
public LIFOBag(int size) {
stack = new Object[size]
}
public void add(Object thing) {
if (stackTop == stack.length - 1) {
throw new RuntimeException("裂带stack overflow!")
} else {
stackTop++
stack[stackTop] = thing
}
}
public Object remove() {
Object o
if (stackTop == 0) {
o = null
} else {
o = stack[stackTop]
stackTop--
}
return o
}
public static void main(String[] args) {
Bag bag = new LIFOBag(50)
for(int i = 0i<50i++) {
bag.add(i)
Object o = bag.remove()
System.out.println(o)
}
}
}
FIFO的
class FIFOBag implements Bag {
private Object[] queue
private int first = 0
private int last = 0
public FIFOBag(int size) {
queue = new Object[size]
}
/* 模拟循塌源悔环队列 */
public void add(Object thing) {
if (first == last + 1 || (first == 0 &&last == queue.length-1)) {
throw new RuntimeException("团正queue overflow!")
} else {
// 向队尾添加
last++
if(last == queue.length) {
last = 0
}
queue[last] = thing
}
}
public Object remove() {
Object o
if (first == last) {
o = null
} else {
o = queue[first]
first++
if(first == queue.length) {
first = 0
}
}
return o
}
}
/** Created on 2004-12-25
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @Michelangelo
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
import java.util.*
public class TestReplacement {
/**
*
*/
private final int ArraySize=20
private int digitalArray[]=new int [ArraySize]
//private int digitalArray[]={1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6}
private static final int frameSize[]={1,2,3,4,5,6,7}
private static int errorCount=0
Vector frame=new Vector()
public TestReplacement() {
super()
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
TestReplacement aT=new TestReplacement()
aT.generateRandomDigit()
aT.output()
System.out.println("-------------Using FIFO--------------")
System.out.println()
for(int i=0i<frameSize.lengthi++){
System.out.println("Frame size: "+frameSize[i]+"\n")
aT.initFrameForFIFO(frameSize[i])
aT.FIFOReplace(frameSize[i])
System.out.println("Total errors found: "+errorCount)
System.out.println("\n************************************\n")
errorCount=0
}
System.out.println()
System.out.println("----------------Using LRU----------------")
System.out.println()
for(int i=0i<frameSize.lengthi++){
System.out.println("Frame size: "+frameSize[i]+"\n")
aT.initFrameForLRU(frameSize[i])
aT.LRUReplace(frameSize[i])
System.out.println("Total errors found: "并桥液+errorCount)
System.out.println("绝物\n************************************\n")
errorCount=0
}
}
public void generateRandomDigit(){
for(int i=0i<ArraySizei++){
digitalArray[i]=(int)Math.round(Math.random()*9)
}
}
public void output(){
System.out.println("随消芦机序列:")
for(int i=0i<ArraySizei++){
System.out.print(" "+digitalArray[i])
}
System.out.println()
}
public void initFrameForFIFO(int fS){
frame.removeAllElements()
for(int i=0i<fSi++){
frame.addElement(new Couple(fS-i))
}
}
public void initFrameForLRU(int fS){
frame.removeAllElements()
for(int i=0i<fSi++){
frame.addElement(new Couple(0))
}
}
public void LRUReplace(int fS){
boolean findThesame=false
int pre=-1//存放刚刚查找到的位置
int flag=-1
for(int j=0j<digitalArray.lengthj++){
boolean match=false
for(int i=0i<fSi++){
if(((Couple)frame.elementAt(i)).value==digitalArray[j]){
((Couple)frame.elementAt(i)).time=0
match=true//是否找到匹配
System.out.println(j+": find "+((Couple)frame.elementAt(i)).value+" "+"at location "+i)
System.out.println()
flag=i
break
}
}
if(match==true&&flag!=pre){
for(int i=0i<fSi++){
if(i!=flag){
((Couple)frame.elementAt(i)).time--
}
}
pre=flag
}
else if(match==false){
int temp=0
int index=0
for(int i=0i<fSi++){
if(((Couple)frame.elementAt(i)).time<temp){
temp=((Couple)frame.elementAt(i)).time
index=i
}
}
for(int i=0i<fSi++){
if(i!=index){
((Couple)frame.elementAt(i)).time--
}
else{
((Couple)frame.elementAt(i)).time=0
System.out.print(j+": replace "+((Couple)frame.elementAt(i)).value+" ")
System.out.print("at location "+index+" ")
((Couple)frame.elementAt(i)).value=digitalArray[j]
System.out.println("with "+((Couple)frame.elementAt(i)).value)
errorCount++
System.out.println("error count"+errorCount)
System.out.println()
}
}
}
}
}
public void FIFOReplace(int fS){
//boolean blank=true//是否开始的已填充完
int i=0
for(int j=0j<digitalArray.lengthj++){
boolean match=false
for(i=0i<fSi++){
if(((Couple)frame.elementAt(i)).value==digitalArray[j]){
match=true//是否找到匹配
System.out.println(j+": find "+((Couple)frame.elementAt(i)).value+" "+"at location "+i)
break
}
}
if(match==false){
int temp=0
int index=-1
for(i=0i<fSi++){
if(((Couple)frame.elementAt(i)).time>temp){
temp=((Couple)frame.elementAt(i)).time
index=i
}
}
for(i=0i<fSi++){
if(i==index){
System.out.print(j+": replace "+((Couple)frame.elementAt(i)).value+" ")
System.out.print("at location "+i+" ")
((Couple)frame.elementAt(i)).value=digitalArray[j]
System.out.println("with "+((Couple)frame.elementAt(i)).value)
((Couple)frame.elementAt(i)).time=1
errorCount++
System.out.println("error count"+errorCount)
System.out.println()
}
else{
((Couple)frame.elementAt(i)).time++
}
}
}
}
}
}
class Couple{
public int value=-1
public int time=-1
public Couple(int t){
time=t
}
}
算法思想:用Vector来模拟页表,而扔进去的Couple的个数就是表的大小。Couple 中的Time设置衰老时间(FIFO)或未使用周期(LRU),Value为请求序列中digitalArray[]的值。序列长为20由随机函数产生的0-9的整型值。frameSize[]中存放的是页表的大小(也就是对应着扔几个Couple进去啦)
FIFO:初始化时先清空然后放Couple,将他们的Time属性按放的顺序分别置为frameSize,frame-1,frame-2.......1.数值越大放的越早,value通通置-1。接下来的工作就是对value和time的处置。若在vector中的couple的value里找到了value匹配则pass。如果没有找的话就从中time里找最老的,(谁的time最大就最老),找到后把它的value变成相应的请求的页面值,把它的time=1.对于不是最老的呢,就把他们的岁数都加一吧。
LRU:初始化时先清空然后放Couple,将他们的Time属性置-1,value通通置-1。接下来处理请求序列了。若在value里找到对应的页面话就把对应的Time置0。其他的Couple对应的time- -。如果没有找到的话就找一个最近使用的最少的啦(就是对应的time最负的那个),找到以后就把它的Value换成请求的页面值并且把它的time置0.与此同时,其他的time--。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)