一介白书生 发表于 2013-5-19 20:40:45

很有意思的一道题

编写程序。 设n个元素的线性表顺序存储在一维数组r的前n个位置上,试删除值为x的元素,写出算法。顺序表的结构为:

struct seqlist         
{   char r;
    int length;
};

Input

第一行一个N代表接下来几组数据
每组数据有3行,第一行输入一个M,代表该表的元素个数,第二行为M个元素,第三行为要删除的元素。
若表中无该元素则不操作。
注意:由于服务器端为Linux系统,请尽量使用%s代替%c,即使用字符串进行输入,然后取字符串中第一个字符。
Output

打印删除后该表剩余的所有元素
Sample Input
2
4
1 2 3 4
2
3
q w e
w

Sample Output
1 3 4
q e
我写出来就是编译不起,感觉是对的,希望大哥哥们说说此题该注意的要点

小丑Delta 发表于 2013-5-19 22:30:42

还没学数据结构 看不懂:funk: 不过帮你顶顶

熊文杰 发表于 2013-5-20 01:14:19

把你的代码贴出来看看。这个应该不难的。
1.根据第一个输入的数字来分配多大的数组空间,假设这里输入2,那么这里可以分配
struct seqlist *pList = ( seqlist *)malloc(sizeof(seqlist )*2);
然后一个for(int i= 0;i< 2; i++){...}

2.根据第二个输入的数字,假设是4,在for循环中把length = 4

3.输入r中的应该包含的数据

4.输入删除的数据。这里要写一个删除函数。顺序表的删除算法很简单的。先判断有没有要删除的元素,如果有记住是第几个,然后把这个位置后的值全部前移。

5.for循环输出两组数据。

熊文杰 发表于 2013-5-20 02:15:13

自己写了一段代码如下,通过vs2005 实践通过,代码如下#include "stdafx.h"

#include<string.h>
#include<stdio.h>
#include <malloc.h>

#define maxlen 1024
struct seqlist
{
        char r;
        int length;
};

//创建数据,返回创建的数据组数
int createData(struct seqlist *&pList)
{
        int nRows = 0;
        printf("请输入想要创建几组数据:");
        scanf("%d",&nRows);
        pList = (seqlist *)malloc(sizeof(seqlist) *nRows);


        return nRows;
};

//添加数据函数

void addData(seqlist &pList)
{
        //初始化pList
        memset(pList.r,0,1024);
        pList.length = 0;


        int nLen = 0;
        printf("请输入添加数据的个数:");
        scanf("%d",&nLen);

        //给字符数组赋初值
        char pStr = {0};
        memset(pStr,0,1024);

        printf("请输入元素的内容:");
        scanf("%s",pStr);

        pList.length = nLen;

        //给pList中的r数组赋值
        int i = 0;
        for (i = 0; i < nLen; i++)
        {
                if (i >= strlen(pStr))
                {
                        return;
                }
                pList.r = pStr;
        }
}

//查找函数
int findPoint(char *pData,int nlen,char cData)
{

        int i = 0;
        for (i = 0; i < nlen; i++)
        {
                if (pData == cData)
                {
                        break;
                }
        }

        return i;
}

//删除函数
void del(char *pData,int nlen,char cData)
{
        int nPoint = findPoint(pData,nlen,cData);
        if (nPoint == nlen)
        {
                //没有找到
                return;
        }

        int i = 0;
        for (i = 0; i < nlen; i++)
        {
                if (i >= nPoint)
                {
                        pData = pData;
                }
        }
}


void deleteData(struct seqlist &pList)
{
        char sData = {0};
        memset(sData,0,1024);
        printf("请输入要删除的元素:");
        scanf("%s",sData);

        del(pList.r,1024,sData);

};

//输出函数
void showList(struct seqlist *pList,int nRows)
{
        int i = 0;
        for (i = 0; i < nRows; i++)
        {
                printf("%s\n",pList.r);
        }
}

int _tmain(int argc, _TCHAR* argv[])
{
        struct seqlist *pList = NULL;
        int nRows = createData(pList);

        int i = 0;
        for (i = 0; i < nRows; i++)
        {
                addData(pList);
                deleteData(pList);
        }

        showList(pList,nRows);


        int nQuit = 0;
        while (1 != nQuit)
        {
                printf("请输入1退出:");
                scanf("%d",&nQuit);
        }
        return 0;
}结果如图:

一介白书生 发表于 2013-5-20 22:15:44

熊文杰 发表于 2013-5-20 02:15 static/image/common/back.gif
自己写了一段代码如下,通过vs2005 实践通过,代码如下结果如图:

强烈支持楼主ing……非常感谢你

一介白书生 发表于 2013-5-20 22:19:50

熊文杰 发表于 2013-5-20 02:15 static/image/common/back.gif
自己写了一段代码如下,通过vs2005 实践通过,代码如下结果如图:

真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可以向你求助,现在学习这个还是有点吃力,谢谢你了

熊文杰 发表于 2013-5-20 22:41:01

本帖最后由 熊文杰 于 2013-5-20 22:42 编辑

一介白书生 发表于 2013-5-20 22:19 static/image/common/back.gif
真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可 ...
大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了,好好学习把。大学是学习的最好时间,时间充足,别等到到快毕业了 或者工作之后再来学习,就没有大学那么多时间了。

一站幸福 发表于 2013-5-21 12:24:02

激动人心,无法言表!

一介白书生 发表于 2013-5-21 13:17:42

熊文杰 发表于 2013-5-20 22:41 static/image/common/back.gif
大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了, ...

谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教请教。。。。

熊文杰 发表于 2013-5-21 14:49:14

一介白书生 发表于 2013-5-21 13:17 static/image/common/back.gif
谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教 ...

可以啊,不过我有时候会不在线,你说下你q把,我加下你。

一介白书生 发表于 2013-5-23 09:44:08

熊文杰 发表于 2013-5-21 14:49 static/image/common/back.gif
可以啊,不过我有时候会不在线,你说下你q把,我加下你。

非常感谢,我的是1014030682,密码权限是why

bafengao 发表于 2013-5-25 13:56:13

我只是路过打酱油的。向你学习

bafengao 发表于 2013-5-26 13:52:35

我只是路过打酱油的。

小号4 发表于 2013-6-22 10:12:23

路过看看…………
页: [1]
查看完整版本: 很有意思的一道题