判断字符串是否是递增排列

//设计一个算法,判断链串s中的所有元素是否为递增排列的

#include
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;idata = 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;
}

你可能感兴趣的:(c++,数据结构)