欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-22 19:55:28
...

顺序表实现 

#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->退出\n"<<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<<"\t"<<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->退出\n"<<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<<"\t"<<a[i]<<endl;
			}
		}
		cout<<endl;
	}
	return 0;
}