Chinaunix首页 | 论坛 | 博客
  • 博客访问: 62300
  • 博文数量: 30
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 256
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-10 17:54
个人简介

成功,总是从一点一滴小事做起!!!

文章分类

全部博文(30)

文章存档

2016年(5)

2015年(25)

我的朋友

分类: C/C++

2015-09-16 00:24:42

   基本题目大意: 多组测试数据,对于每组测试数据,首先输入的是两个整数n,m(0<m <n<100),分别表示顺序表初始有n个元素,m次操作
接下来是n个整数,表示顺序表中的n个元素
然后是m次操作命令,命令是Insert X Y ,Delete X , Locate X , GetElem X中的一种,其中的X,Y均为整数。

解题思路:这道题主要是在码代码方面比较繁琐,其他方面都没有什么太大难度,主要如果用静态存储结构,在进行插入和删除的时候,要注意考虑删除或插入字符后面的内容,千万不能弄混,造成错误;如果是用动态存储结构,在插入,删除时只要考虑前后指针的关系即可,但在查找元素的问题上就会有一定的麻烦,记得设定好计数器和头指针。。。。以下是代码(静态结构)


#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstring>
#define maxsize 110
using namespace std;
char num[maxsize];
//int finger[maxsize];
typedef struct
{
    int ans[maxsize];
    int n;                       //用来计数
} sqmark;


void print(sqmark fff)        //用来输出顺序表
{
    for(int t=0;t<fff.n;t++)
    {
        cout<<fff.ans[t]<<" ";
    }
    cout<<endl;
}
void Insert(sqmark &ff)        //在顺序表中插入元素
{
    int x,y,k;
    cin>>x>>y;
    if(x>ff.n+1)     cout<<"Wrong Input!"<<endl;
    else
    {
        for(k=ff.n; k>x-1;k--)            //记得顺序表的插入和删除时,要先空出位置,不能直接进行赋值,以免造成错误
        {
            ff.ans[k]=ff.ans[k-1];
        }
        ff.ans[k]=y;
        ff.n++;
        print(ff);
    }


}
void Delete(sqmark &ff)        //删除顺序表中的元素
{
    int x,number=-1;
    cin>>x;
    for(int k=0;k<ff.n;k++)
    {
        if(ff.ans[k]==x)    { number=k;   break;}
    }
    if(number!=-1)
    {
        for(int k=number;k<ff.n-1;k++)
            ff.ans[k]=ff.ans[k+1];
        ff.n--;
        print(ff);
    }
    else
        cout<<"Wrong Input!"<<endl;
}
void Locate(sqmark &ff)        //定位元素X的位置
{
    int x,number=-1;
    cin>>x;
    for(int k=0;k<ff.n;k++)
    {
        if(ff.ans[k]==x)    { number=k;   break;}
    }
    if(number!=-1)
    {
        cout<<number+1<<endl;
    }
    else
        cout<<"Wrong Input!"<<endl;
}
void GetElem(sqmark &ff)        //查找顺序表中X位置的元素值
{
    int x;
    cin>>x;
    if(x>ff.n) cout<<"Wrong Input!"<<endl;
    else
    {
        cout<<ff.ans[x-1]<<endl;
    }
}


int main()
{
    int nn,mm;
    while(cin>>nn>>mm)
    {
        sqmark fin;
        fin.n=0;
        for(int i=1; i<=nn; i++)
        {
            cin>>fin.ans[fin.n++];
        }
        for(int i=1; i<=mm; i++)
        {
            cin>>num;
            if(num[0]=='I')
            {
                Insert(fin);
            }
            else if(num[0]=='D')
            {
                Delete(fin);
            }
            else if(num[0]=='L')
            {
                Locate(fin);
            }
            else if(num[0]=='G')
            {
                GetElem(fin);
            }
        }
    }
}

这是顺序表的静态存储结构的几个基本操作:
顺序表是我们数据结构中的基本储存形式,现在给定一个顺序表,有如下操作:
Insert X Y: 在顺序表中X位置插入Y元素,遍历输出当前顺序表的所有元素
Delete X:删除顺序表中的X元素,如果有多个X元素,只删除第一个X,遍历输出当前顺序的所有元素
Locate X:输出顺序表中X元素的所在的位置,如果有多个X元素,只输出第一个X元素的位置
GetElem X:输出顺序表中X位置上的元素

如果操作合法,则输出相应的结果
如果操作不合法,则输出"Wrong Input!"

阅读(1498) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:单链表的前插法

给主人留下些什么吧!~~