zoukankan      html  css  js  c++  java
  • 数据结构——顺序表的创建、插入、删除等操作

    顺序表实现 

    #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;
    }
  • 相关阅读:
    FJSC2020合集
    考试前注意事项
    CSP-S&&NOIP2020游记
    IOI2020集训队作业题单
    对拍程序
    Re:memset 赋值
    2019-12-29 Div.3模拟赛题解
    NOI2020 游记
    边三连通分量算法
    【题解】Code+7 教科书般的亵渎
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324358.html
Copyright © 2011-2022 走看看