c++实现数据结构1.顺序表

头文件seqlist.h

#ifndef _SEQLIST_H_
#define _SEQLIST_H_

#include<iostream>
using namespace std;

template <class Type>
class seqlist
{
public:
	seqlist()
	{
		capacity = DefaultSize;
		base = new Type[capacity];
		size = 0;
	}
	seqlist(int sz)
	{
		capacity = sz > DefaultSize ? sz : DefaultSize;
		base = new Type[capacity];
		size = 0;
	}
	~seqlist()
	{
		delete []base;
	}
public:
	bool Full()const
	{
		if (size > capacity)
			return true;
		return  false;
	}
	bool Empty()const
	{
		if (size == 0)
			return true;
		return false;
	}
	bool push_back(Type const x)
	{
		if (Full())
			return false;
		else
		{
			base[size] = x;
			size++;
		}
		return true;
	}
	bool push_front(Type const x)
	{
		if (Full())
			return flse;
		else
		{
			for (int i = size; i > 0; ++i)
			{
				base[i] = base[i - 1];
			}
			base[0] = x;
		}
		return true;
	}
	void show_list()
	{
		for (int i = 0; i < size; ++i)
		{
			cout << base[i] << "->";
		}
		cout << "end" << endl;
	}
	void pop_back()
	{
		size--;
	}
	void pop_front()
	{
		for (int i = 0; i < size-1; ++i)
		{
			base[i] = base[i + 1];
		}
		size--;
	}
	bool insert_val(Type x)
	{
		if (Empty() || size == capacity)
			return false;
		sort(); 
		int i = 0;
		while (x > base[i] && i < size)
		{
			i++;
		}
		insert_pos(i,x);
		return true;
	}
	bool insert_pos(int pos,Type x)
	{
		if (pos <0 || pos>size)
			return false;
		else
		{
			for (int i = size; i > pos; --i)
			{
				base[i] = base[i - 1];
			}
			base[pos] = x;
		}
		size++;
	}
	int find(Type key)
	{
		for (int i = 0; i < size; ++i)
		{
			if (base[i] == key)
				return i;
		}
		cout << "no exit" << endl;
		return -1;
	}
	bool delete_pos(int pos)
	{
		if (pos<0 || pos > size)
			return false;
		else
		{
			for (int i = pos; i < size - 1; ++i)
			{
				base[i] = base[i + 1];
			}
			size--;
		}
	}
	bool delete_val(Type key)
	{
		if (Empty())
			return false;
		else
		{
			int pos = find(key);
			delete_pos(pos);
		}
		return true;
	}
	void sort()
	{
		Type tmp;
		for (int i = 1; i<size; ++i)
		{
			tmp = base[i];
			int j;
			for ( j = i; tmp < base[j - 1]; --j)
			{
				base[j] = base[j - 1];
			}
			base[j] = tmp;
		}
	}
	void resever()
	{
		if (size == 0 || size == 1)
			return;
		
		for (int i = 0; i < (size / 2); ++i)
		{
		    Type tmp = base[i];
			base[i] = base[size - i-1];
			base[size - i-1] = tmp;
		}
	}
	int length()
	{
		return size;
	}
	void clear()
	{
		size = 0;
	}
	void destory()
	{
		delete[]base;
	}
private:
	enum { DefaultSize = 8 };
	Type *base;
	int capacity;
	int size;
};

#endif

主程序

#include"seqlist.h"

void main()
{
	seqlist<int> mylist;
	int select = 1;
	int item;
	int pos;
	while (select)
	{
		cout <<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<< endl;
		cout <<"&                                      &"<< endl;
		cout <<"& [1]  push_back   [2]  push_fornt     &"<< endl;
		cout <<"& [3]  show_list   [4]  pop_back       &"<< endl;
		cout <<"& [5]  pop_front   [6]  insert_val     &"<< endl;
		cout <<"& [7]  insert_pos  [8]  find           &"<< endl;
		cout <<"& [9]  delete_pos  [10] delete_val     &"<< endl;
		cout <<"& [11] sort        [12] resever        &"<< endl;
		cout <<"& [13] length      [14] clear          &"<< endl;
		cout <<"& [15] destroy     [0]  quit_system    &"<< endl;
		cout <<"&                                      &"<< endl;
		cout <<"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"<< endl;
		cout << "please choose->" ;
		cin >> select;
		switch (select)
		{
			case 1:
				cout << "please cin data end with -1:" << endl;
				while (cin >> item, item != -1)
				{
					mylist.push_back(item);
				}
				break;
			case 3:
				mylist.show_list();
				break;
			case 4:
				mylist.pop_back();
				break;
			case 5:
				mylist.pop_front();
				break;
			case 6:
				cout << "please cin the data you want insert:";
				cin >> item;
				mylist.insert_val(item);
				break;
			case 7:
				cout << "please cin pos and data:";
				cin >> pos >> item;
				mylist.insert_pos(pos, item);
				break;
			case 8:
				cout << "please cin the data you want find ,it will back its pos: ";
				cin >> item;
				cout<<mylist.find(item)<<endl;
				break;
			case 9:
				cout << "please cin the pos you want delete: ";
				cin >> pos;
				mylist.delete_pos(pos);
				break;
			case 10:
				cout << "please cin the data you want to dalete: ";
				cin >> item;
				mylist.delete_val(item);
				break;
			case 11:
				cout << "sort !"<<endl;
				mylist.sort();
				break;
			case 12:
				mylist.resever();
				break;
			case 13:
				cout<<mylist.length()<<endl;
				break;
			case 14:
				mylist.clear();
				break;
			case 15:
				mylist.destory();
					break;
		default:
			break;
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用c++实现顺序表:多文件编程,层次清晰,函数有注释 SeqList();//构造函数,存储的元素个数设为0 bool setLength(size_t length);//设置已经存储的元素个数 bool addElement(ElemType element);//把某个元素添加到顺序表末尾 bool addElement(ElemType element , size_t n);//插入一个元素,使其成为第n个元素,其余元素后移 bool delElement();//删除所有的元素 bool delElement(size_t n);//删除第n个元素 bool delElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,把这个元素删除 bool replaceElement(ElemType element , size_t n);//使用一个元素,替换掉第n个元素 bool swapElement(size_t n1 , size_t n2);//把第n1个元素和第n2个元素交换 ElemType* getElement();//得到数组头的指针 ElemType* getElement(size_t n);//得到第n个元素的指针 size_t getLength();//得到存储的元素个数 size_t getMaxSize();//得到顺序表容量 bool showElementDetail();//输出所有的元素细节 bool showElementDetail(size_t n);//输出第n个元素的细节 bool showElementDetail(string elementDetailType,string elementDetail);//通过某个元素细节找到元素,输出元素所有细节 size_t findElement(string elementDetailType,string elementDetail);//通过某个元素细节找到元素位置 static int inputAInt(int min = 0,int max = 9,int defaultValue = -1);//从键盘读取,限制为一个min到max间的整数,非法情况返回defaultValue void startControlLoop();//打开控制界面 ~SeqList();//析构函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值