鱼C论坛

 找回密码
 立即注册
查看: 4604|回复: 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 实践通过,代码如下
  1. #include "stdafx.h"

  2. #include<string.h>
  3. #include<stdio.h>
  4. #include <malloc.h>

  5. #define maxlen 1024
  6. struct seqlist
  7. {
  8.         char r[maxlen];
  9.         int length;
  10. };

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


  18.         return nRows;
  19. };

  20. //添加数据函数

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


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

  29.         //给字符数组赋初值
  30.         char pStr[1024] = {0};
  31.         memset(pStr,0,1024);

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

  34.         pList.length = nLen;

  35.         //给pList中的r数组赋值
  36.         int i = 0;
  37.         for (i = 0; i < nLen; i++)
  38.         {
  39.                 if (i >= strlen(pStr))
  40.                 {
  41.                         return;
  42.                 }
  43.                 pList.r[i] = pStr[i];
  44.         }
  45. }

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

  49.         int i = 0;
  50.         for (i = 0; i < nlen; i++)
  51.         {
  52.                 if (pData[i] == cData)
  53.                 {
  54.                         break;
  55.                 }
  56.         }

  57.         return i;
  58. }

  59. //删除函数
  60. void del(char *pData,int nlen,char cData)
  61. {
  62.         int nPoint = findPoint(pData,nlen,cData);
  63.         if (nPoint == nlen)
  64.         {
  65.                 //没有找到
  66.                 return;
  67.         }

  68.         int i = 0;
  69.         for (i = 0; i < nlen; i++)
  70.         {
  71.                 if (i >= nPoint)
  72.                 {
  73.                         pData[i] = pData[i+1];
  74.                 }
  75.         }
  76. }


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

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

  84. };

  85. //输出函数
  86. void showList(struct seqlist *pList,int nRows)
  87. {
  88.         int i = 0;
  89.         for (i = 0; i < nRows; i++)
  90.         {
  91.                 printf("%s\n",pList[i].r);
  92.         }
  93. }

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

  98.         int i = 0;
  99.         for (i = 0; i < nRows; i++)
  100.         {
  101.                 addData(pList[i]);
  102.                 deleteData(pList[i]);
  103.         }

  104.         showList(pList,nRows);


  105.         int nQuit = 0;
  106.         while (1 != nQuit)
  107.         {
  108.                 printf("请输入1退出:");
  109.                 scanf("%d",&nQuit);
  110.         }
  111.         return 0;
  112. }
复制代码
结果如图:
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-4-20 12:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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