顺序表和单链表问题,帮忙看看,怎么都过不去!

默默see这个world 2015-04-09 05:27:55
#include<iostream.h>
#include<stdlib.h>
const int defaultSize=100;
template<class T>
class LinearList{
public:
LinearList();
~LinearList();
virtual int Size()const=0;
virtual int Length()const=0;
virtual int Search(T& x)const=0;
virtual int Locate(int i)const=0;
virtual bool getData(int i,T& x)const=0;
virtual void setData(int i,T &x)=0;
virtual bool Insert(int i,T&x)=0;
virtual bool Remove(int i,T& x)=0;
virtual bool IsEmpty()const=0;
virtual bool IsFull()const=0;
virtual void Sort()=0;
virtual void input()=0;
virtual void output()=0;
// virtual LinearList<T>operator=(LinearList<T>&L)=0;
};
template<class T> //顺序表
class SeqList:public LinearList<T>{
protected:
T*data;
int maxSize;
int last;
//void reSize(int newSize);
public:
// template<class T>
SeqList(int sz)
{
if(sz>0)
{
maxSize=sz;
last=-1;
data=new T[maxSize];
if(data==NULL)
{cerr<<"存储分配错误!"<<endl;exit(1);}
}
}
// template<class T>
SeqList(SeqList<T>&L)
{
maxSize=L.Size();
last=L.Length()-1;
T value;
data=new T[maxSize];
if(data==NULL)
{cerr<<"存储分配错误!"<<endl;exit(1);}
for(int i=1;i<=last+1;i++)
{L.getData(i,value);data[i-1]=value;}
}
~SeqList(){delete data[];}
int Size()const{return maxSize;}
int Length()const{return last+1;}
// template<class T>
int Search(T& x)const{
for(int i=0;i<=last;i++)
if(data[i]==x)
return i+1;
return 0;
}
int Locate(int i)const{
if(i>=1&&i<=last+1)
return i;
else return 0;
}
bool getData(int i,T& x)const
{
if(i>0&&i<=last+1)
{
x=data[i-1];
return true;
}
else
return false;
}
void setData(int i,T &x)
{
if(i>0&&i<=last+1)
data[i-1]=x;
}
// template<class T>
bool Insert(int i,T&x)
{
if(last==maxSize-1)
return false;
if(i<0||i>last+1)
return false;
for(int j=last;j>=i;j--)
data[j+1]=data[j];
data[i]=x;
last++;
return true;
}
// template<class T>
bool Remove(int i,T& x)
{
if(last==-1)
return false;
if(i<1||i>last+1)
return false;
x=data[i-1];
for(int j=i;j<=last;j++)
data[j-1]=data[j];
last--;
return true;
}
bool IsEmpty(){return(last==-1)?true:false;}
bool IsFull(){return(last==maxSize-1)?true:false;}
void input()
{
cout<<"开始建立顺序表,请输入表中元素个数:";
while(1){
cin>>last;
if(last<=maxSize-1)break;
cout<<"表中元素输入有误,范围不能超过"<<maxSize-1<<":";
}
for(int i=0;i<=last;i++)
{
cin>>data[i];
cout<<i+1<<endl;
}
}

void output()
{
cout<<"顺序表当前元素最后位置为:"<<last<<endl;
for(int i=0;i<=last;i++)
cout<<"#"<<i+1<<":"<<data[i]<<endl;
}
// SeqList<T>operator=(SqeList<T>&L);
};
template<class T > //单链表
struct LinkNode{
T data;
LinkNode<T> *link;
LinkNode(LinkNode<T> *ptr=NULL)
{link=ptr;}
LinkNode(const T&item,LinkNode<T> *ptr=NULL)
{data=item;link=ptr;}
};
template<class T>
class List:public LinearList<T>{
public:
List(){first=new LinkNode<T>;}
List(const T& x){first=new LinkNode<T>(x);}
List(List<T>&L)
{
T value;
LinkNode<T>*scrptr=L.getHead;
LinkNode<T>*desptr=first=new LinkNode<T>;
while(srcptr->link!=NULL)
{
value=srcptr->link->data;
destptr=destptr->link;
srcptr=srcptr->link;
destptr->link=NULL;
}
}
~List(){makeEmpty();}
void makeEmpty()
{
LinkNode<T> *q;
while(first->link!=NULL)
{
q=first->link;
first->link=q->link;
delete q;
}
}
int Length()const
{
LinkNode<T> *p=first->link;
int count=0;
while(p!=NULL)
{
p=p->link;
count++;
}
return count;
}
LinkNode<T> *getHead()const{return false;}
LinkNode<T> * Search(T x)
{
LinkNode<T>*current=first->link;
while(current!=NULL)
if(current->data==x)break;
else current=current->link;
return current;
}
LinkNode<T> * Locate(int i)
{
if(i<0)return NULL;
LinkNode<T>*current=first;
int k=0;
while(current!=NULL&&k<i)
{
current=current->link;k++;
}
return current;
}
bool getData(int i,T& x)const
{
if(i<=0)return NULL;

LinkNode<T>*current=Locate(i);
if(current==NULL)return false;
else{x=current->data;return false;}
}
void setData(int i,T &x)
{
if(i<=0)return;
LinkNode<T>*current=Locate(i);
if(current==NULL)return;
else current->data=x;
}
bool Insert(int i,T&x)
{
LinkNode<T>*current=Locate(i);
if(current==NULL)return false;
LinkNode<T>*newNode=new LinkNode<T>(x);
if(newNode==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
newNode->link=current->link;
current->link=newNode;
return true;
}
bool Remove(int i,T& x)
{
LinkNode<T>*current=Locate(i-1);
if(current==NULL||current->link==NULL)return false;
LinkNode<T>*del=current->link;
current->link=del->link;
x=del->data;
delete del;
return true;
}
bool IsEmpty()const
{return first->link==NULL?true:false;}
bool IsFull()const
{return false;}
// void Sort();
void input(T endTag)
{
LinkNode<T>*newNode,*last;T val;
makeEmpty();
cin>>val;last=first;
while(val!=endTag){
newNode=new LinkNode<T>(val);
if(newNode==NULL){cerr<<"存储分配错误!"<<endl;exit(1);}
last->link=newNode;last=newNode;
cin>>val;
}
last->link=NULL;
}
void output()
{
LinkNode<T>*current=first->link;
while(current!=NULL)
{
cout<<current->data<<endl;
current=current->link;
}
}
// List<T>operator=(List<T>&L);
protected:
LinkNode<T> *first;
};
void Union(SeqList<int>&LA,SeqList<int>&LB)
{
int n=LA.Length(),m=LB.Length(),i,x,k;
for(i=1;i<=m;i++)
{
LB.getData(i,x);
k=LA.Search(x);
if(k==0)
{
LA.Insert(n,x);n++;
}
}
};
void Intersection(SeqList<int>&LA,SeqList<int>&LB)
{
int n=LA.Length(),m=LB.Length(),i=1,k,x;
while(i<=n)
{
LA.getData(i,x);
k=LB.Search(x);
if(k==0)
{
LA.Remove(i,x);
n--;

}
else i++;
}
};
void main()
{
int x;
cout<<"进入顺序表输入1,进入单链表输入2"<<endl;
cin>>x;
if(x==1)
{
SeqList<int> a,b;
a.input();
b.input();
}
}
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
anshiny 2015-04-09
  • 打赏
  • 举报
回复
#include<iostream>
#include<stdlib.h>

const int defaultSize = 100;

using namespace std;

template<class T>
class LinearList {
public:
	//LinearList();
	//~LinearList();
	virtual int Size() const = 0;
	virtual int Length() const = 0;
	virtual int Search(T& x) const = 0;
	virtual int Locate(int i) const = 0;
	virtual bool getData(int i,T& x) const = 0;
	virtual void setData(int i,T &x) = 0;
	virtual bool Insert(int i,T&x) = 0;
	virtual bool Remove(int i,T& x) = 0;
	virtual bool IsEmpty() const = 0;
	virtual bool IsFull() const = 0;
	virtual void Sort() = 0;
	virtual void input() = 0;
	virtual void output() = 0;
};

template<class T>   //顺序表
class SeqList : public LinearList<T> {
protected:
	T *data;
	int maxSize;
	int last;
public:
	SeqList(int sz) {
		if(sz > 0) {
			maxSize = sz;
			last = -1;
			data = new T[maxSize];
			if(data == NULL) {
				cerr << "存储分配错误!" << endl;
				exit(1);
			}
		}
	}
	
	SeqList(SeqList<T> &L) {
		maxSize = L.Size();
		last = L.Length() - 1;
		T value;
		data = new T[maxSize];
		if(data == NULL) {
			cerr << "存储分配错误!" << endl;
			exit(1);
		}
		for(int i=1; i<=last+1; i++) {
			L.getData(i, value);
			data[i-1] = value;
		}
	}

	~SeqList() {
		delete []data;
	}

	int Size() const { 
		return maxSize;
	}

	int Length() const {
		return last+1;
	}

	//	template<class T>
	int Search(T &x) const {
		for(int i=0; i<=last; i++)
			if(data[i] == x)
				return i + 1;
		return 0;
	}

	int Locate(int i) const {
		if(i >= 1 && i <= last + 1)
			return i;
		return 0;
	}

	bool getData(int i, T &x) const {
		if(i > 0 && i <= last + 1) {
			x = data[i - 1];
			return true;
		}
		return false;
	}

	void setData(int i, T &x) {
		if(i > 0 && i <= last + 1)
			data[i-1] = x;
	}

	//  template<class T>
	bool Insert(int i, T &x) {
		if(last == maxSize - 1)
			return false;
		if(i < 0 || i > last + 1)
			return false;
		for(int j=last; j>=i; j--)
			data[j + 1] = data[j];
		data[i] = x;
		last++;
		return true;
	}

	//	template<class T>
	bool Remove(int i, T &x) {
		if(last == -1)
			return false;
		if(i < 1 || i > last + 1)
			return false;
		x = data[i - 1];
		for(int j=i; j<=last; j++)
			data[j - 1] = data[j];
		last--;
		return true;
	}

	bool IsEmpty() const {
		return (last == -1) ? true : false;
	}

	bool IsFull() const {
		return (last == maxSize - 1) ? true : false;
	}

	void Sort() {};

	void input() {
		cout << "开始建立顺序表,请输入表中元素个数:";
		while(1) {
			cin >> last;
			if(last <= maxSize - 1)
				break;
			cout << "表中元素输入有误,范围不能超过" << maxSize - 1 << ":";
		}
		for(int i=0; i<=last; i++) {
			cin >> data[i];
			cout << i + 1 << endl;
		}
	}
	
	void output() {
		cout << "顺序表当前元素最后位置为:" << last << endl;
		for(int i=0; i<=last; i++)
			cout << "#" << i + 1 << ":" << data[i] << endl;
	}
	//	SeqList<T>operator=(SqeList<T>&L);
};

template<class T > //单链表
struct LinkNode{
	T data;
	LinkNode<T> *link;
	LinkNode(LinkNode<T> *ptr = NULL) {
		link = ptr;
	}

	LinkNode(const T &item, LinkNode<T> *ptr = NULL) {
		data = item;
		link = ptr;
	}
};

template<class T>
class List : public LinearList<T> {
public:
	List() {
		first = new LinkNode<T>;
	}

	List(const T &x) {
		first = new LinkNode<T>(x);
	}

	List(List<T> &L) {
		T value;
		LinkNode<T> *scrptr = L.getHead();
		LinkNode<T> *desptr = first = new LinkNode<T>;
		while(srcptr->link != NULL) {
			value = srcptr->link->data;
			destptr = destptr->link;
			srcptr = srcptr->link;
			destptr->link = NULL;
		}
	}

	~List() {
		makeEmpty();
	}

	void makeEmpty() {
		LinkNode<T> *q;
		while(first->link != NULL) {
			q = first->link;
			first->link = q->link;
			delete q;
		}
	}

	int Length() const {
		LinkNode<T> *p = first->link;
		int count = 0;
		while(p != NULL) {
			p = p->link;
			count++;
		}
		return count;
	}

	LinkNode<T> *getHead() const {
		return false;
	}

	LinkNode<T> * Search(T x) {
		LinkNode<T> *current = first->link;
		while(current != NULL)
			if(current->data == x)
				break;
			else current = current->link;
		return current;
	}

	LinkNode<T> *Locate(int i) {
		if(i < 0)
			return NULL;
		LinkNode<T> *current = first;
		int k = 0;
		while(current != NULL && k < i) {
			current = current->link;
			k++;
		}
		return current;
	}

	bool getData(int i, T &x) const {
		if(i <= 0)
			return NULL;		
		LinkNode<T> *current = Locate(i);
		if(current == NULL)
			return false;
		else {
			x = current->data;
			return false;
		}
	}

    void setData(int i, T &x) {
		if(i <= 0)
			return;
		LinkNode<T> *current = Locate(i);
		if(current == NULL)
			return;
		current->data = x;
	}

	bool Insert(int i, T &x) {
		LinkNode<T> *current = Locate(i);
		if(current == NULL)
			return false;
		LinkNode<T> *newNode = new LinkNode<T>(x);
		if(newNode == NULL) {
			cerr << "存储分配错误!" << endl;
			exit(1);
		}
		newNode->link = current->link;
		current->link = newNode;
		return true;
	}

	bool Remove(int i, T &x) {
		LinkNode<T> *current = Locate(i - 1);
		if(current == NULL || current->link == NULL)
			return false;
		LinkNode<T> *del = current->link;
		current->link = del->link;
		x = del->data;
		delete del;
		return true;
	}

	bool IsEmpty() const {
		return first->link == NULL ? true : false;
	}

	bool IsFull() const {
		return false;
	}
	
	void input(T endTag) {
		LinkNode<T> *newNode, *last;
		T val;
		makeEmpty();
		cin >> val;
		last = first;
		while(val != endTag) {
			newNode = new LinkNode<T>(val);
			if(newNode == NULL) {
				cerr << "存储分配错误!" << endl;
				exit(1);
			}
			last->link = newNode;
			last = newNode;
			cin >> val;
		}
		last->link = NULL;
	}

	void output() {
		LinkNode<T> *current = first->link;
		while(current != NULL) {
			cout << current->data << endl;
			current = current->link;
		}
	}
	//	List<T>operator=(List<T>&L);
protected:
	LinkNode<T> *first;
};

void Union(SeqList<int> &LA, SeqList<int> &LB) {
	int n = LA.Length(), m = LB.Length(), i, x, k;
	for(i=1; i<=m; i++) {
		LB.getData(i, x);
		k = LA.Search(x);
		if(k == 0) {
			LA.Insert(n, x);
			n++;
		}
	}
};

void Intersection(SeqList<int> &LA, SeqList<int> &LB) {
	int n = LA.Length(), m = LB.Length(), i = 1, k, x;
	while(i <= n) {
		LA.getData(i, x);
		k = LB.Search(x);
		if(k == 0) {
			LA.Remove(i, x);
			n--;
		}
		else
			i++;
	}
};

int main() {
	int x;
	cout << "进入顺序表输入1,进入单链表输入2" << endl;
	cin >> x;
	if(x == 1) {
		SeqList<int> a(100), b(50);
		a.input();
		b.input();
	}
	return 0;
}
707wk 2015-04-09
  • 打赏
  • 举报
回复
引用 3 楼 as665203 的回复:
[quote=引用 2 楼 zxh707wk 的回复:] 参考代码段 https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c
参考哪里?我的是c++写的,vc环境的[/quote]第320行开始,真是的,给你还要我自己去找
  • 打赏
  • 举报
回复
引用 2 楼 zxh707wk 的回复:
参考代码段 https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c
参考哪里?我的是c++写的,vc环境的
707wk 2015-04-09
  • 打赏
  • 举报
回复
参考代码段 https://github.com/707wk/Senior-middle-school/blob/master/Filling%20in%20the%20gaps.c
  • 打赏
  • 举报
回复
大家来看看,这是模仿数据结构书上的,百度一下就有各个函数的详解了。。。。编译老是一堆错误,百度也改了好多次也还是解决不了,哪位大神来帮帮忙

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧