这是我自己编写的关于文本编辑的简单实现,还有些小漏洞,希望有高手的能帮忙改一下 ,谢谢啦
#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;
}