SJTU OJ.1204_new

数据结构作业1204的链表实现代码:
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. class T
  5. {
  6. friend istream &operator>>(istream &in,T &obj)
  7. {
  8. T::node* tmp=obj.head;
  9. for(int i=0;i<100;++i)
  10. {
  11. tmp=obj.add();
  12. in.getline(tmp->data,2000);obj.L++;
  13. if(strcmp(tmp->data,"******")==0){obj.L--;break;}
  14. }
  15. return in;
  16. }
  17. private:
  18. struct node
  19. {
  20. char data[2010];
  21. node *next,*prev;
  22. node(){}
  23. ~node(){}
  24. };
  25. node *head,*tail;
  26. int L;
  27. public:
  28. T()
  29. {
  30. L=0;
  31. head=new node();
  32. tail=new node();
  33. head->next=tail;
  34. tail->prev=head;
  35. }
  36. ~T(){}
  37. T::node* add()
  38. {
  39. node *tmp;
  40. tmp=new node();
  41. tmp->prev=tail->prev;
  42. tmp->next=tail;
  43. tail->prev->next=tmp;
  44. tail->prev=tmp;
  45. return tmp;
  46. }
  47. void list(int num1,int num2)
  48. {
  49. if (num1<= 0 || num2<= 0 || num1 > L || num2 > L || num1>num2)
  50. {
  51. cout<<"Error!"<<endl;
  52. }
  53. else
  54. {
  55. node *tmp;tmp=head->next;
  56. for(int i=0;i<L;i++)
  57. {
  58. if(i>num1-2&&i<num2){cout<<tmp->data<<endl;}
  59. if(i==num2-1){break;}
  60. tmp=tmp->next;
  61. }
  62. }
  63. }
  64. void ins(int num1,int num2,char *tmp)
  65. {
  66. node *Tmp;Tmp=head;
  67. if(num1>=1&&num1<=L){for(int i=0;i<num1;i++)Tmp=Tmp->next;}
  68. if(num1<1||num2<1||num1>L||num2>(strlen(Tmp->data)+1))
  69. {
  70. cout<<"Error!"<<endl;
  71. }else
  72. {
  73. int R=strlen(Tmp->data);
  74. for(int i=(strlen(Tmp->data)-1);i>=(num2-1);i--){Tmp->data[i+strlen(tmp)]=Tmp->data[i];}
  75. Tmp->data[R+strlen(tmp)]='\0';
  76. for(int i=0;i<strlen(tmp);i++){Tmp->data[i+num2-1]=tmp[i];}
  77. }
  78. }
  79. void del(int num1,int num2,int num3)
  80. {
  81. node *Tmp;Tmp=head;int R=0;
  82. if(num1>=1&&num1<=L){for(int i=0;i<num1;i++){Tmp=Tmp->next;}R=strlen(Tmp->data);}
  83. if(num1<1||num2<1||num1>L||num2>R||(num2+num3)>(R+1))
  84. {
  85. cout<<"Error!"<<endl;
  86. }else
  87. {
  88. for(int i=0;i<(R-num3-num2+1);i++){Tmp->data[i+num2-1]=Tmp->data[i+num3+num2-1];}
  89. Tmp->data[R-num3]='\0';
  90. }
  91. }
  92. void quit()
  93. {
  94. node *Tmp;Tmp=head;
  95. for(int i=0;i<L;i++){Tmp=Tmp->next;cout<<Tmp->data<<endl;}
  96. }
  97. };
  98. int main()
  99. {
  100. T text;cin>>text;
  101. char order[5];
  102. char tmp[100];
  103. int m1,m2,m3;
  104. while(true)
  105. {
  106. cin>>order;
  107. if(strcmp(order,"list")==0)
  108. {
  109. cin>>m1>>m2;
  110. text.list(m1,m2);
  111. }
  112. else if(strcmp(order,"ins")==0)
  113. {
  114. cin>>m1>>m2;
  115. cin.get();
  116. cin.getline(tmp,100);
  117. text.ins(m1,m2,tmp);
  118. }
  119. else if(strcmp(order,"del")==0)
  120. {
  121. cin>>m1>>m2>>m3;
  122. text.del(m1,m2,m3);
  123. }
  124. else if(strcmp(order,"quit")==0) {break;}
  125. }
  126. text.quit();
  127. return 0;
  128. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值