//设计一个算法,判断链串s中的所有元素是否为递增排列的
#include<iostream>
using namespace std;
struct LinkNode
{
char data; //存放一个字符
LinkNode *next; //指向下一个结点的指针
};
class LinkStringClass
{
LinkNode *head; //链串头结点指针
public:
LinkStringClass(); //构造函数
~LinkStringClass(); //析构函数
LinkStringClass &operator = (char *cstr); //重载赋值运算符
int StrLength(); //求串长度
bool zeng(); //判断递增
};
LinkStringClass::LinkStringClass()
{
head = new LinkNode(); //创建头结点
head->next = NULL;
}
LinkStringClass::~LinkStringClass()
{
LinkNode *pre,*p;
pre = head;
p = pre->next;
while(p != NULL) //释放链串的所有结点空间
{
delete pre;
pre = p; //pre,p同步后移
p = p->next;
}
delete pre;
}
LinkStringClass &LinkStringClass::operator = (char *cstr)
{
int i;
LinkNode *r = head , *p; //r始终指向尾结点
for(i=0;i<cstr[i]!='\0';i++) //循环建立字符结点
{
p = new LinkNode();
p->data = cstr[i];
r->next = p; //将*p结点插入到尾部
r = p;
}
r->next = NULL; //尾结点的next置为NULL
return *this;
}
int LinkStringClass::StrLength()
{
int i=0;
LinkNode *p = head->next; //p指向第一个字符结点
while(p != NULL)
{
i++;
p = p->next; //p移到下一个字符结点
}
return i;
}
bool LinkStringClass::zeng()
{
LinkNode *p;
p = head->next;
while(p->next != NULL) //用p != NULL ,会出现最后一个字符与NULL比较的情况
{
if(p->next->data < p->data)
return false;
p = p->next;
}
return true;
}
int main()
{
char b[100];
cout << "请输入一个字符串:";
cin >> b;
LinkStringClass s;
s = b;
if(s.zeng())
cout << "该字符串是递增排列" << endl;
else
cout << "该字符串不是递增排序" << endl;
return 0;
}