#include <iostream>
#include <string>
using namespace std;
typedef struct node
{
string str;
node* next;
}node;
node *top = NULL;
void create()
{
if (top != NULL)
{
cout << "stack is existing" << endl;
return;
}
top=new node;
top->str="HeadNode";
top->next=NULL;
cout<<"stack intialize successfully"<<endl;
}
bool isempty()
{
if (top == NULL)
{
cout << "stack is not existing,please create one" << endl;
return true;
}
if(top->next==NULL)
{
cout<<"stack is empty"<<endl;
return true;
}
cout<<"not empty"<<endl;
return false;
}
void push(string ele)
{
if (top == NULL)
{
cout << "stack is not existing,please create one" << endl;
return;
}
node *tmp=new node;
tmp->next=top->next;
tmp->str=ele;
top->next=tmp;
}
string pop()
{
if (top == NULL)
{
cout << "stack is not existing,please create one" << endl;
return "";
}
if(isempty())
{
return "";
}
node *pItem = top->next;
string tmp=pItem->str;
top->next=pItem->next;
delete pItem;
return tmp;
}
void print(node*t)
{
if (top == NULL)
{
cout << "stack is not existing,please create one" << endl;
return;
}
while(t!=NULL)
{
cout<<t->str<<endl;
t=t->next;
}
}
int main()
{
int n = -1;
string ele="";
cout << "1: create" << endl;
cout << "2: isempty" << endl;
cout << "3: push a element" << endl;
cout << "4: pop a element" << endl;
cout << "5: print all element" << endl;
while(true)
{
ele="";
cout << "Please enter the command number: ";
cin>>n;
if (cin.fail()) // when you enter a English character,it will appear endless loop,Code below will get it right!
{
cin.sync();
cin.clear();
n = -1;
cout<<"illegal charactor"<<endl;
continue;
}
switch(n)
{
case 1:
create();
break;
case 2:
isempty();
break;
case 3:
if (top == NULL)
{
cout << "stack is not existing,please create one" << endl;
break;
}
cout << "Please enter a string: ";
cin>>ele;
push(ele);
break;
case 4:
ele=pop();
if(ele.length()==0)
break;
cout<<"pop "<<ele<<endl;
break;
case 5:
print(top);
break;
case 0:
return 0;
default:
cout<<"illegal charactor"<<endl;
break;
}
} // while(true)
while(!top) //when the application exit,the memory we allocated will return to system,seem we don't need free memory.
{ //but in order to develop good habits use delete correspond to new.
node *tmp = top;
top = top->next;
delete tmp;
}
return 0;
}
c++ cin一个整数 输入其它字符产生死循环错误的解决方法。
最新推荐文章于 2023-12-21 00:26:10 发布