随笔 - 18  文章 - 5  trackbacks - 0
<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

程序设计基础

牛们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

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 阅读(131) 评论(0)  编辑 收藏 引用 所属分类: OJ平台

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