鱼C论坛

 找回密码
 立即注册
查看: 5270|回复: 13

很有意思的一道题

[复制链接]
发表于 2013-5-19 20:40:45 | 显示全部楼层 |阅读模式
4鱼币
编写程序。 设n个元素的线性表顺序存储在一维数组r[0..maxlen-1]的前n个位置上,试删除值为x的元素,写出算法。顺序表的结构为:

struct seqlist         
{   char r[maxlen];
    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
我写出来就是编译不起,感觉是对的,希望大哥哥们说说此题该注意的要点

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-19 22:30:42 | 显示全部楼层
还没学数据结构 看不懂:funk: 不过帮你顶顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[maxlen]中的应该包含的数据

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

5.for循环输出两组数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[maxlen]; 
        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[1024] = {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[i] = pStr[i];
        }
}

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

        int i = 0;
        for (i = 0; i < nlen; i++)
        {
                if (pData[i] == 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[i] = pData[i+1];
                }
        }
}


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

        del(pList.r,1024,sData[0]);

};

//输出函数
void showList(struct seqlist *pList,int nRows)
{
        int i = 0;
        for (i = 0; i < nRows; i++)
        {
                printf("%s\n",pList[i].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[i]);
                deleteData(pList[i]);
        }

        showList(pList,nRows);


        int nQuit = 0;
        while (1 != nQuit)
        {
                printf("请输入1退出:");
                scanf("%d",&nQuit);
        }
        return 0;
}
结果如图:
11111111.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-20 22:15:44 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-20 22:19:50 | 显示全部楼层
熊文杰 发表于 2013-5-20 02:15
自己写了一段代码如下,通过vs2005 实践通过,代码如下结果如图:

真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可以向你求助,现在学习这个还是有点吃力,谢谢你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-20 22:41:01 | 显示全部楼层
本帖最后由 熊文杰 于 2013-5-20 22:42 编辑
一介白书生 发表于 2013-5-20 22:19
真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可 ...

大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了,好好学习把。大学是学习的最好时间,时间充足,别等到到快毕业了 或者工作之后再来学习,就没有大学那么多时间了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-21 12:24:02 | 显示全部楼层
激动人心,无法言表!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-21 13:17:42 | 显示全部楼层
熊文杰 发表于 2013-5-20 22:41
大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了, ...

谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教请教。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-21 14:49:14 | 显示全部楼层
一介白书生 发表于 2013-5-21 13:17
谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教 ...

可以啊,不过我有时候会不在线,你说下你q把,我加下你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-5-23 09:44:08 | 显示全部楼层
熊文杰 发表于 2013-5-21 14:49
可以啊,不过我有时候会不在线,你说下你q把,我加下你。

非常感谢,我的是1014030682,密码权限是why
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-25 13:56:13 | 显示全部楼层
我只是路过打酱油的。向你学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-5-26 13:52:35 | 显示全部楼层
我只是路过打酱油的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-22 10:12:23 | 显示全部楼层
路过看看…………
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 18:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表