关于文本编辑的简单实现

  这是我自己编写的关于文本编辑的简单实现,还有些小漏洞,希望有高手的能帮忙改一下 ,谢谢啦

 

 

 

 

#include<iostream>
#include<stdio.h>
#include <conio.h>

#include <malloc.h>
using namespace std;
#define  STACK_INIT_SIZE  100
typedef struct
 {
     char *base;//栈底指针,在栈构造之前和销毁之后,base的值喂NULL
     char *top;//栈顶指针
    
 }sqstack;//栈结构
 typedef struct LNode
 {
  char data;
  struct LNode *next;
 }LNode;//链表结构 
int InitStsck(sqstack &s)
 {//构造一个空栈
    s.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
    if(!s.base)   return 0 ;
    s.top=s.base;

    return 1;
 }//InitStsck
 char GetTop(sqstack s)
 {//若栈不空,则用e返回栈顶元素
  char e;
    if(s.top==s.base)  return 0;
    e=*(s.top-1);
    return e;
 }//GetTop
 
int Push(sqstack &s,char e)
{ //插入e为新的栈顶元素
    *s.top=e;
    s.top++;
    return 1;
} //  Push
char Pop(sqstack &s)
{//若栈不空,则删除栈顶元素,用e返回其值
 char e;
 if(s.top==s.base) return 0;
 --s.top;
 e=*s.top;
 return e;
}//Pop
void ClearStack(sqstack &s)
{ //清空栈
 s.top=s.base;
}// Clearstack
void DestroyStack(sqstack &s)
{//销毁栈
  free(s.base);
}//DestroyStack 
LNode *Init_Sq(LNode *p)
{//初始化一个单链表
 
  LNode *q,*head;
  p=(LNode *)malloc(sizeof(LNode));
  if(!p)
  cout<<"no memory"<<endl;
  p->next=NULL; 
  head=p;
  q=p;
  return head;
}//Init-Sq
int exchange(sqstack &a,sqstack &b)
{//将a栈中的元素导入b栈忠
 char c,e;
 while (c!='0')
 {
  c= Pop(a);
  Push(b,c);
 }
 return 1;
}//exchange
int change(sqstack &b,LNode *l)
{// 把栈b中的元素导入单链表l中
 LNode *p,*q;
 char c,e;
    p=l;
 while (c!='0')
 {
  c= Pop(b); 
  p->data=c;
  p->next=Init_Sq(p);
 }
  return 1;
}//change
void show(LNode *p)
{//输出大链表中的元素
 LNode*l;
 l=p;
 cout<<"all datas"<<endl;
 while(!l->next)
 {
  cout<<l->data<<endl;
  l=l->next;
 }
}//show
void DestroyLnode(LNode *p)
{//销毁单链表
 free(p);
}//DestroyLnode 
 
 
 
int main()
{
 sqstack a,b;
 char ch ,c;
 LNode *p;
 InitStsck(a);
 InitStsck(b) ;
 p=Init_Sq(p);
 ch=getchar();
 while(ch!='&')
 {
  while(ch!='&'&&ch!='/n')
  {
   switch(ch)
   {
    case '#':Pop(a);  break;
    case '@':ClearStack(a);break;
    default:Push(a,ch);break;
   }
  ch=getchar();
  }
  if(ch='/n')  Push(a,ch);
  exchange(a,b);
  change(b,p);
  ClearStack(a);
  if(ch!='&')
  ch=getchar();
 }


 show(p);
 DestroyStack(a);
 DestroyStack(b);
 DestroyLnode(p);
 return 0;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值