数据结构 考研题




#include <iostream>
using namespace std;


#include "stdlib.h"


struct strNode
{
	char m_char;
	strNode *next;
};

class strClassList
{
public:
	strClassList()
	{
		m_isize=0;
		phead=NULL;
	}
	~strClassList()
	{
	   strNode *p=	phead;
	   strNode *q=NULL;
		while (p!=NULL)
		{
			q=p;
			p=p->next;
			delete q;
			
		}
	}
	
	void  initstrClassList(char str);
	void  addTail(char c);
	void  showList();
	void  sharedComTailNode(strClassList&b);/*strClassList& a,*/
	strNode& operator[](int index);/*strClassList& A*/
	int getSize(){return m_isize;}
private:
	strNode * phead;
	int  m_isize;
};
//int(*parr[4]);
void  strClassList ::initstrClassList(char str)
{
	if (phead==NULL)
	{
		phead=new strNode;
		phead->next=NULL;
		phead->m_char=str;
		m_isize=1;
	}
}
void   strClassList ::addTail(char str)
{
	if (phead==NULL)
	{
		phead=new strNode;
		phead->next=NULL;
	    phead->m_char=str;
	}
	else
	{
		strNode *pNew=new strNode;
		pNew->m_char=str;
		pNew->next=NULL;
		strNode *p=phead;
		while(p->next!=NULL)p=p->next;
		p->next=pNew;
	}
	m_isize++;
}
void   strClassList ::showList()
{
	strNode *p=phead;
	while(p!=NULL)
	{
		cout<<p <<" :"<<p->m_char<<endl;
		p=p->next;
	}
	cout<<endl;

}
strNode&  strClassList ::operator[](int index)/*strClassList& A*/
{
	if (index<0 || index>m_isize)
	{
		cout<<"param err"<<endl;
		//return NULL;
	}
	strNode *p =phead;
	int ListCount=0;
	while(p!=NULL)
	{
		if (ListCount==index)
			return *p;
		else
			p=p->next;
		ListCount++;
	}
	if (p==NULL)
	{
		//return NULL;
	}

}
void  strClassList ::sharedComTailNode(strClassList&  B)/*strClassList& A,*/
{
	
	strNode* pA=NULL;
    strNode* pB=NULL;
	pA=phead;
	pB=B.phead;
	int iASize=getSize();
	int iBSize=B.getSize();
	int minSize=getSize()<B.getSize()?getSize():B.getSize();
	int index;
	//从后到前寻找相同的后缀 找到之后
	for ( index=1;index<minSize;index++)
	{
		if ((*this)[iASize-index].m_char==B[iBSize-index].m_char)
			continue;
		else
			break;
	}
	strNode temp;
	strNode* ptemp,*qtemp;
	temp=(*this)[iASize-index];
	ptemp=temp.next;
	//删除后续节点
	while(ptemp!=NULL)
	{
		qtemp=ptemp;
		ptemp=ptemp->next;
		delete qtemp;
	}
	//指向新的节点
	(*this)[iASize-index].next=	B[iBSize-index].next;
	
}
void  main()
{
	strClassList str1,str2;
	str1.addTail('L');
    str1.addTail('o');
    str1.addTail('a');
    str1.addTail('d');
	str1.addTail('0');
	str1.addTail('n');
	str1.addTail('g');
	str1.showList();
	str2.addTail('B');
	str2.addTail('e');
	//str2.addTail('e');
	//str2.addTail('e');
	//str2.addTail('e');
	//str2.addTail('e');
	//str2.addTail('i');
	str2.addTail('i');
	str2.addTail('n');
	str2.addTail('g');
	str2.showList();
	str2.sharedComTailNode(str1);
	//cout<<str2[3].m_char;
	cout<<"*****1****"<<endl;
	str1.showList();
	cout<<"*****2****"<<endl;
	str2.showList();
	//  这里退出会有问题,大家想一想 为什么^-^
	system("pause");
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值