随笔 - 18  文章 - 5  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

程序设计基础

牛们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

1. An exercise on lisk
• Write a definition of LIST_ENTRY, and the insertion and deletion operations
• Write a simple line editor
Keep the entire text on a linked list, one line in a separate node. Start the program with entering LINEEDIT file, after which a prompt appears along with the line number. If the letter “I” is entered with a number n following it, then insert the text to be followed before line n. If “I” is not followed by a number, then insert the text before the current line. If “D” is entered with two numbers n and m, one n, or no number following it, then delete lines n through m, line n, or the current line. Do the same with the command, “L”, which stands for listing lines. If “A” is entered, then append the text to the existing lines. Entry “E” signifies exit and saving the text in a file.
//这道题实在做不出,参考了别的同学的…… 
#include<iostream>
#include
<fstream>
using namespace std;
ifstream fin(
"test.txt");
int cl=0;
//建立LIST_ENTRY类 
class LIST_ENTRY
{
    
public:
        
struct node
        {
            
public:
                node 
*next;
                
string s0;
                node(
string s="")
                {
                    s0
=s;
                    next
=NULL;
                }
        }
*first;
        
int l;
        LIST_ENTRY()
        {
            l
=0;
            first
=NULL;
        }
//A命令 
        int ins(string x,int y=cl+1)
        {
            
int t=y-2;
            node 
*p=first,*temp=new node(x);
            
if (t==-1)
            {
                temp
->next=first;
                first
=temp;
                l
++;
                cl
++;
                
return 1;
            }
            
if (p==NULL)
            
return 0;
            
while(t)
            {
                t
--;
                p
=p->next;
                
if(p==NULL)
                
return 0;
            }
            temp
->next=p->next;
            p
->next=temp;
            
if(y==cl+1)
            cl
++;
            
else 
            cl
=y+1;
            l
++;
            
return 1;
        }
//D命令 
        int del(int x)
        {
            node 
*p=first;
            
if (x==1)
            {
                
if (first==NULL)return 0;
                first
=first->next;
                l
--;
                delete p;
                
return 1;
            }
            
if(p==NULL)
            
return 0;
            
while (x-2)
            {
                x
--;
                p
=p->next;
                
if(p==NULL)
                
return 0;
            }
            node 
*temp=p->next;
            
if (temp!=NULL)
            {
                p
->next=temp->next;
                delete temp;
                l
--;
                
return 1;
            }
            
return 0;
        }
//E命令 
        int lis(int x,int y=0,node* p=NULL)
        {
            
if (x==1)
            p
=first;
            
if (y==1&&x==1)
            freopen(
"out.txt","w",stdout);
            
if (p==NULL)
            
return 0;
            cl
=x;
            
if (!y)
            cout
<<cl<<'>';
            cout
<<p->s0<<endl;
            
return lis(x+1,y,p->next);
        }
}a;
int chg(char* c,string &s,int &x,int &y,string &s2)
{
    
int i,j;
    s
="",s2="";
    x
=y=cl;
    
if (c[1]!=' '||(c[0]!='I'&&c[0]!='D'&&c[0]!='A'))
    {
        
for(i=0;c[i];i++)
        s
+=c[i];
        
return 0;
    }
    s
+=c[0];
    
if (c[0]=='A')
    {
        
for (i=2,j=0;c[i];i++)
        {
            
if(c[i]!=' ')j=1;
            
if(j==1)s2+=c[i];
        }
        
return 0;
    }
    
for (i=2;c[i];i++)
        
if (c[i]!=' ')
        {
            
for (j=0;c[i]!=' '&&c[i];i++)
                j
=j*10+c[i]-'0';
            y
=x=j;
            
break;
        }
    
if (c[0]!='D')
    
return 0;
    
for (;c[i];i++)
        
if (c[i]!=' ')
        {
            
for (j=0;c[i]!=' '&&c[i];i++)
            j
=j*10+c[i]-'0';
            y
=j;
            
break;
        }
    
return 0;
}
int main()
{
    
string s,s2;
    
int x,y,i=0,j=0,k=0;
    
char c[1000];
    
while(fin.getline(c,1000,10))
    {
        
for(i=0,s="";c[i];i++)
            s
+=c[i];
        a.ins(s);
    }
    cout
<<"LINEEDIT.txt"<<endl;
    a.lis(
1);
    cout
<<cl<<'>';
    
while(cin.getline(c,1000,10))
    {
        chg(c,s,i,j,s2);
        
if(s=="L")
        {
            k
=0;
            a.lis(
1);
            cout
<<cl<<'>';
            
continue;
        }
        
if(s=="A")
        {
            a.ins(s2);
            cout
<<cl<<'>';
            
continue;
        }
        
if(s=="I")
        {
            k
=2;
            cl
=i;
            cout
<<cl<<'>';
            
continue;
        }
        
if(s=="E")
        {
            k
=0;
            a.lis(
1,1);
            
return 0;
        }
        
if(s=="D")
        {
            
for(k=j;k>=i;k--)
                a.del(k);
            k
=0;
            cl
=a.l;
            cout
<<cl<<'>';
            
continue;
        }
        
if(k==2)
            a.ins(s,cl);
        cout
<<cl<<'>';
    }
    system(
"pause");
    
return 0;
}
2. An exercise on queue
• Write a queue using a doubly linked list
• Simulate a command-dispatching system
– It can accept user‟s commands (from „a‟ – „j‟)
– These commands will take 1~10s, respectively
– The user commands will be enqueued if the program can not finish the previous commands
– The program will quit if user inputs command „q‟
• Hints:
– Use “_kbhit()” to determine whether user inputs a command
– Use “Sleep(1000)” to simulate the 1-second processing
• Add #include “Windows
posted on 2010-11-01 08:28 jyy 阅读(122) 评论(0)  编辑 收藏 引用 所属分类: OJ平台

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理