算法与数据结构课程中的c++实现的顺序表和链表

呵呵,老师布置的作业,自己写的奥!

顺序表:

#include <iostream>
#include <string>
using namespace std;
struct Data
{	
	int stationNum;
    string name;
	string time;
	int personUpNum;
	int personDownNum;
	Data * next;
};

Data* LinkedlistInit()                 //初始化一个站点
{
    Data * L = new Data;
    if (L == NULL)
    {
		cout <<"没有足够的内存空间!"<<endl;
    }
	L->next = NULL;
	return L;
}

int LinkedListLength(Data * L)        //求总站数
{
	Data * p = new Data;
	p = L->next;
	int j = 0;
	while(p)
	{
       j++;
	   p = p->next;
	}
    return j;
}

int LinkedListupPerson(Data * L)        //求总上车人数
{
	Data * p = new Data;
	p = L->next;
	int j = 0;
	while(p)
	{
		j += p->personUpNum ;
		p = p->next;
	}
    return j;
}

Data * LinkedListInsert(Data * L,Data * p,Data e)   //插入新的站点
{
    Data * pre = new Data;
	pre = L;
	while (pre && pre->next!=p)
	{
		pre = pre->next;
	}
	if (!pre)
	{
		cout <<"不存在*p结点!"<<endl;
		exit(0);
	}
	Data * s= new Data;
	s->name = e.name;
	s->time = e.time;
	s->stationNum = e.stationNum;
	s->personUpNum = e.personUpNum;
	s->personDownNum = e.personDownNum;
	s->next = pre->next;
	pre->next = s;
	return L;
}

Data * LinkedListDel(Data * L,string name)     //删除一个站点
{
	if (L->next == NULL)
	{
		cout <<"空表!"<<endl;
	}
    Data * pre = new Data;
	pre = L;
	while (pre->next && pre->next->name != name)
	{
		pre = pre->next;
	}
	if (pre->next==NULL)
	{
		cout <<"不存在该站名!"<<endl;
		exit(0);
	}
	Data * s= new Data;
    s = pre->next;
	pre->next = s->next;
	delete(s);
	return L;
}

void Listtraversal(Data * L)     //遍历List
{
   	Data * p = new Data;
	p = L;
	while(p != NULL)
	{
		cout <<"号码 :"<<p->stationNum<<endl;
		cout <<"站名 :"<<p->name<<endl;
		cout <<"到达时间 :"<<p->time<<endl;
		cout <<"上车人数 :"<<p->personUpNum<<endl;
	    cout <<"下车人数 :"<<p->personDownNum<<endl;
		p = p->next;
	}
}

string ListgetTime(Data * L , string name) //根据站名得到时间
{
	Data * p = new Data;
	p = L->next;
	while(p->name != name)
	{
		p = p->next;
	}
	if (p != NULL)
	{
        return p->time;
	}
	else
	{
		cout <<"没有该站!"<<endl;
		exit(0);
	}
}

void ListgetprebyName(Data * L , string name)   //根据站名得到前一个站
{
	Data * p = new Data;
	Data * q = new Data;
	q = L;
	p = L->next;
	while(p->name != name)
	{
		p = p->next;
		q = q->next;
	}
	if (p != NULL && q != L)
	{
        cout <<"前一个站为:"<<q->name<<endl;
	}
	else
	{
		cout <<"没有该站!"<<endl;
	}

}

void ListgetafterbyName(Data * L , string name)     //根据站名得到后一个站
{
	Data * p = new Data;
	p = L->next;
	while(p->name != name)
	{
		p = p->next;
	}
	if (p != NULL && p->next != NULL)
	{
        cout <<"后一个站为:"<<p->next->name<<endl;
	}
	else
	{
		cout <<"没有该站!"<<endl;
	}
	
}

int main()
{
	Data  a;
	a.name = "烟台大学";
	a.time = "7";
	a.personUpNum = 32;
	a.personDownNum = 0;
	a.stationNum = 1;
	Data  b;
	b.name = "工商学院";
	b.time = "8";
	b.personUpNum = 12;
	b.personDownNum = 22;
	b.stationNum = 2;
	Data  c;
	c.name = "清泉路";
	c.time = "9";
	c.personUpNum = 2;
	c.personDownNum = 4;
    c.stationNum = 3;
	Data * header= new Data;
	header = LinkedlistInit();
	LinkedListInsert(header,header->next,a);
	LinkedListInsert(header,header->next,b);
	LinkedListInsert(header,header->next,c);
	cout <<LinkedListLength(header)<<endl;
	Listtraversal(header->next);
	cout <<"总的上车人数 :"<<LinkedListupPerson(header)<<endl;
	cout <<"根据name得到time :"<<ListgetTime(header,"烟台大学")<<endl;
	ListgetprebyName(header,"工商学院");
	ListgetprebyName(header,"清泉路");
	ListgetprebyName(header,"烟台大学");
	ListgetafterbyName(header,"工商学院");
	ListgetafterbyName(header,"清泉路");
	ListgetafterbyName(header,"烟台大学");
	LinkedListDel(header,"烟台大学");
    Listtraversal(header->next);
}


链表:

#include <iostream>
#include <string>
using namespace std;
struct Data
{	
	int stationNum;
    string name;
	string time;
	int personUpNum;
	int personDownNum;
};
class list
{
public:
	int max;
    static int length;
    Data * data;
	Data * p;
	list(int m);
    void initList(int st, string n, string t, int pu, int pd);  //初始化一个站并且插入
	void deleteList(string n);                                  //删除一个站点
    static int getLength();                                     //求总站数
    int getpersonall();                                         //总上车人数
	void getinformation();                                      //遍历各站(站名、到达时间、上下车人数)
    string getTimebyname(string n);                             //查找第i站,根据站名查找到达该站的时间
	void getprebystationName(string n);                         //已知某站,求该站的前一站
	void getafterbystationName(string n);                       //已知某站,求该站的后一站
};
int list::length = 0;

int list::getLength()
{
    return length;
}

void list::getprebystationName(string n)
{
	int len = 0;
	if (length == 0)
	{
		cout <<"空表!"<<endl;
		return;
	}
	data = p;
	while(data->name != n)
	{
		if (len >= (length-1))
		{
			break;
		}
		data++;
		len++;
	}
	data--;
    try
	 {
	   cout <<"号码 :"<<data->stationNum<<endl;
	   cout <<"站名 :"<<data->name<<endl;
	   cout <<"到达时间 :"<<data->time<<endl;
	   cout <<"上车人数 :"<<data->personUpNum<<endl;
	   cout <<"下车人数 :"<<data->personDownNum<<endl;
	}
    catch(int)
	{cerr<<"error!";}
	catch(string)
	{cerr<<"error!";} 
	catch(Data *)
	{cerr<<"error!";}
    catch(...)
	{cerr<<"查找的表中没有该站!"<<endl;}
}

void list::getafterbystationName(string n)
{
	int len = length;
	data = p;
	while(data->name !=n)
	{
		if (len <= 0)
		{
			break;
		}
		data++;
		len--;
	}
	if (len = 0)
	{
		cout <<"查找的表中没有该站名!"<<endl;
		return ;
	}
	data++;
	if (data++)
	{try{
        cout <<"号码 :"<<data->stationNum<<endl;
		cout <<"站名 :"<<data->name<<endl;
		cout <<"到达时间 :"<<data->time<<endl;
		cout <<"上车人数 :"<<data->personUpNum<<endl;
		cout <<"下车人数 :"<<data->personDownNum<<endl;
	}
    catch(...)
	{cerr<<"查找的表中没有该站!"<<endl;}
	}
}

string list::getTimebyname(string n)
{
    int len = length;
	data = p;
	while(len > 0 )
	{
		if (data->name ==n)
		{
			break;
		}
		data++;
		len--;
	}
	return data->time;
}

void list::getinformation()
{
	int len = length;
	data = p;
	while(len > 0)
	{
		cout <<"号码 :"<<data->stationNum<<endl;
		cout <<"站名 :"<<data->name<<endl;
		cout <<"到达时间 :"<<data->time<<endl;
		cout <<"上车人数 :"<<data->personUpNum<<endl;
		cout <<"下车人数 :"<<data->personDownNum<<endl;
		data++;
		len--;
	}
}

int list::getpersonall()
{
	int personNumbers = 0;
 	int len = length;
	data = p;
	while (len >= 1)
	{
		personNumbers+=data->personUpNum;
        data++;
        len--;
	}
	return personNumbers;
}

list::list (int m)
{
    this->max = m;
    data = new Data[max];
	p = data;
}

void list::initList(int st, string n, string t, int pu, int pd)
{
	if (length == max + 1)
	{
		cout <<"插入的表满!"<<endl;
		return;
	}
	if (st < 0|| st > max)
	{
		cout <<"插入位置出错!"<<endl;
		return;
	}
	if (length == 0)
	{
		data = data + st;
		data->stationNum = st;
		data->name = n;
		data->time = t;
		data->personUpNum = pu;
		data->personDownNum = pd;
	    length++;
	}
	else
	{
		int j = length;
		for (; j > st;j--)
		{
			data[j].stationNum = data[j-1].stationNum;
			data[j].name = data[j-1].name;
			data[j].time = data[j-1].time;
			data[j].personUpNum = data[j-1].stationNum;
			data[j].personDownNum = data[j-1].personDownNum;
		}
		data[j].stationNum = st;
		data[j].name = n;
		data[j].time = t;
		data[j].personUpNum = pu;
	    data[j].personDownNum = pd;
	    length++;
	}
}

void list::deleteList(string n)
{
	int len = 0;
	if (length == 0)
	{
		cout <<"删除的为空表!"<<endl;
		return;
	}
	data = p;
	while(data->name != n)
	{
		if (len >= (length-1))
		{
			break;
		}
		data++;
		len++;
	}
	if (len >= (length-1))
	{
		cout <<"当前要删除的表中没有该站名!"<<endl;
		return ;
	}
	else
	{
	    data = p;
		while(len <(length - 1))
		{
			data[len].stationNum = data[len+1].stationNum;
			data[len].name = data[len+1].name;
			data[len].time = data[len+1].time;
			data[len].personUpNum = data[len+1].stationNum;
			data[len].personDownNum = data[len+1].personDownNum;
			len++;
		}
        length--;
		}
}

int main()
{
    list list1(5);
    list1.initList(0,"南寨","6",12,4);
    list1.initList(1,"烟台大学","7",45,8);
	list1.initList(3,"滨州医学院","9",7,21);
	list1.initList(2,"工商学院","8",8,43);
	list1.initList(2,"烟台山医院","4",4,1);
    cout <<"length :"<<list1.getLength()<<endl;
	cout <<"allnum :"<<list1.getpersonall()<<endl;
    cout <<"遍历输出信息:"<<endl;
	list1.getinformation();
    cout <<"length :"<<list1.getLength()<<endl;
	cout <<"根据name找出time :"<<list1.getTimebyname("烟台大学")<<endl;
	cout <<"已知某站,求该站的前一站"<<endl;
	list1.getprebystationName("南寨");
	cout <<"已知某站,求该站的前一站"<<endl;
	list1.getprebystationName("烟台大学");
	cout <<"已知某站,求该站的后一站"<<endl;
	list1.getafterbystationName("滨州医学院");
	cout <<"已知某站,求该站的后一站"<<endl;
	list1.getafterbystationName("烟台山医院");
    cout <<"删除一个站点"<<endl;
    list1.deleteList("工商学院");
	cout <<"遍历输出信息:"<<endl;
	list1.getinformation();
	cout <<"length :"<<list1.getLength()<<endl;
    cout <<"删除一个站点"<<endl;
    list1.deleteList("月亮湾");
	return 0;
}


以上的代码比较简陋,希望给大家指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值