数据结构——顺序表的创建、插入、删除等操作

顺序表实现 

#include <bits/stdc++.h>
const int maxn=1e3+10;
using namespace std;
struct List
{
	int num;
	int id;
};
typedef struct 
{
	List *place;
	int len;
}Node;
// 初始化
bool init(Node &a)
{
	a.place=new List[maxn];
	if(!a.len)
		return false;
	a.len=0;
	return true;
}
// 取值
bool get_num(Node a,int b,List &c)
{
	if(!b||b>a.len)
		return false;
	c=a.place[b-1];
	return true;
}
// 查找
int find(Node a,int b)
{
	for(int i=0;i<a.len;i++)
		if(a.place[i].num==b)
			return i+1;
	return 0;
}
// 插入
bool insert(Node &a,int b,int c)
{
	if(b<1 || b>a.len+1 || a.len==maxn)
		return false;
	for(int i=a.len-1;i>=b-1;i--)
		a.place[i+1]=a.place[i];
	a.place[b-1].num=c;
	a.len+=1;
	return true;
}
// 删除
bool Delete(Node &a,int b)
{
	if(b<1 || b>a.len)
		return false;
	for(int i=1;i<=a.len;i++)
		a.place[i-1]=a.place[i];
	a.len--;
	return true;
}
int main(int argc, char const *argv[])
{
	Node L;
	List g;
	int n,m,ID;
	// L.len=0;
	cout<<"/*****************请输入要进行的操作的编号*****************/"<<endl;
	cout<<"1->建立"<<endl;
	cout<<"2->输入"<<endl;
	cout<<"3->取值"<<endl;
	cout<<"4->查找"<<endl;
	cout<<"5->插入"<<endl;
	cout<<"6->删除"<<endl;
	cout<<"7->输出"<<endl;
	cout<<"0->退出
"<<endl;
	while(1)
	{
		cout<<"请输入编号:";
		cin>>n;
		if(!n)
			break;
		if(n==1)
		{
			if(init(L))
				cout<<"建立顺序表成功"<<endl;
			else
				cout<<"建立顺序表失败"<<endl;
			cout<<endl;
		}
		if(n==2)
		{
			cout<<"请输入链表元素的个数:";
			cin>>m;
			cout<<"请输入链表元素:";
			L.place=new List[maxn];
			int _;
			for(int i=0;i<m;i++)
			{
				cin>>_;
				L.place[i].num=_;
				L.place[i].id=i;
				L.len++;
			}
		}
		if(n==3)
		{
			
			cout<<"请输入链表中要取值的位置:";
			cin>>ID;
			if(get_num(L,ID,g))
			{
				cout<<"查找成功!";
				cout<<"链表中第"<<ID<<"个位置的元素为:"<<g.num<<endl;
			}
			else
				cout<<"查找失败!位置超出范围!"<<endl;
		}
		if(n==4)
		{
			cout<<"请输入需要查找的元素:";
			int x;
			cin>>x;
			if(find(L,x))
				cout<<"查找成功!该元素在顺序表中"<<endl;
			else
				cout<<"查找失败!该元素不在顺序表中"<<endl;
		}
		if(n==5)
		{
			cout<<"请输入需要插入的位置和元素(用空格隔开):";
			int _,__;
			// cin>>_>>g.num;
			cin>>_>>__;
			if(insert(L,_,__))
				cout<<"插入成功"<<endl;
			else
				cout<<"插入失败"<<endl;
		}
		if(n==6)
		{
			cout<<"请输入要删除的书籍的位置:";
			int _;
			cin>>_;
			if(Delete(L,_))
				cout<<"删除成功"<<endl;
			else
				cout<<"删除失败"<<endl;
		}
		if(n==7)
		{
			cout<<"当前顺序表读出:"<<endl;
			for(int i=0;i<L.len;i++)
				cout<<L.place[i].id<<"	"<<L.place[i].num<<endl;
		}
		cout<<endl;
	}
	return 0;
}

数组实现

#include <bits/stdc++.h>
#define ms(a) memset(a,0,sizeof(a))
const int maxn=1e3+10;
using namespace std;
int a[maxn];
map<int,int>mp;
int main(int argc, char const *argv[])
{
	cout<<"/*****************请输入要进行的操作的编号*****************/"<<endl;
	cout<<"1->建立"<<endl;
	cout<<"2->输入"<<endl;
	cout<<"3->取值"<<endl;
	cout<<"4->查找"<<endl;
	cout<<"5->插入"<<endl;
	cout<<"6->删除"<<endl;
	cout<<"7->输出"<<endl;
	cout<<"0->退出
"<<endl;
	int n,m;
	int flag;
	while(1)
	{
		cout<<"请输入编号:";
		cin>>n;
		if(!n)
			break;
		if(n==1)
		{
			ms(a);
			mp.clear();
			flag=0;
			cout<<"建立顺序表成功"<<endl;
			cout<<endl;
		}
		if(n==2)
		{
			cout<<"请输入元素的个数:";
			cin>>m;
			cout<<"请输入链表元素:";
			for(int i=0;i<m;i++)
			{
				cin>>a[i];
				mp[a[i]]++;
				flag++;
			}
		}
		if(n==3)
		{
			cout<<"请输入链表中要取值的位置:";
			int ID;
			cin>>ID;
			if(ID>m||ID<1)
				cout<<"查找失败!位置超出范围!"<<endl;
			else
			{
				cout<<"查找成功!";
				cout<<"链表中第"<<ID<<"个位置的元素为:"<<a[ID-1]<<endl;
			}
		}
		if(n==4)
		{
			cout<<"请输入需要查找的元素:";
			int x;
			cin>>x;
			if(mp[x])
				cout<<"查找成功!该元素在顺序表中"<<endl;
			else
				cout<<"查找失败!该元素不在顺序表中"<<endl;
		}
		if(n==5)
		{
			cout<<"请输入需要插入的位置及元素(中间用一个空格隔开):";
			int x,y;
			cin>>x>>y;
			for(int i=m-1;i>=x-1;i--)
			{
				a[i+1]=a[i];
			}
			a[x-1]=y;
			m++;
			flag++;
			mp[a[x]]=1;
		}
		if(n==6)
		{
			cout<<"请输入需要删除元素的位置:";
			int x;
			cin>>x;
			if(x>m)
			{
				cout<<"删除失败,超出范围!"<<endl;
				continue;
			}
			if(!flag)
			{
				cout<<"删除失败,顺序表为空!"<<endl;
				continue;
			}
			for(int i=x-1;i<m;i++)
				a[i]=a[i+1];
			mp[a[x-1]]--;
			m--;
			flag--;
			cout<<"删除成功!"<<endl;
		}
		if(n==7)
		{
			cout<<"当前顺序表中的元素及位置:"<<endl;
			for(int i=0;i<m;i++)
			{
				cout<<i+1<<"	"<<a[i]<<endl;
			}
		}
		cout<<endl;
	}
	return 0;
}
原文地址:https://www.cnblogs.com/Friends-A/p/10324358.html