很有意思的一道题
编写程序。 设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
我写出来就是编译不起,感觉是对的,希望大哥哥们说说此题该注意的要点
还没学数据结构 看不懂:funk: 不过帮你顶顶 把你的代码贴出来看看。这个应该不难的。
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循环输出两组数据。
自己写了一段代码如下,通过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 02:15 static/image/common/back.gif
自己写了一段代码如下,通过vs2005 实践通过,代码如下结果如图:
强烈支持楼主ing……非常感谢你 熊文杰 发表于 2013-5-20 02:15 static/image/common/back.gif
自己写了一段代码如下,通过vs2005 实践通过,代码如下结果如图:
真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可以向你求助,现在学习这个还是有点吃力,谢谢你了
本帖最后由 熊文杰 于 2013-5-20 22:42 编辑
一介白书生 发表于 2013-5-20 22:19 static/image/common/back.gif
真是难得给力的帖子啊。你好,我可以加你qq吗,我现在是一名大一的学生,软件工程专业,我想以后有问题可 ...
大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了,好好学习把。大学是学习的最好时间,时间充足,别等到到快毕业了 或者工作之后再来学习,就没有大学那么多时间了。 激动人心,无法言表! 熊文杰 发表于 2013-5-20 22:41 static/image/common/back.gif
大一就这么认真学习啊,不错喔。加油。要是大学四年坚持学习下来 你会很厉害。大学的时光一定不要浪费了, ...
谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教请教。。。。 一介白书生 发表于 2013-5-21 13:17 static/image/common/back.gif
谢谢了,目前就是很盲目,还没有一个明确的目标诶!大哥,我能加你qq吗,以后学习不懂得地方可以向你请教 ...
可以啊,不过我有时候会不在线,你说下你q把,我加下你。 熊文杰 发表于 2013-5-21 14:49 static/image/common/back.gif
可以啊,不过我有时候会不在线,你说下你q把,我加下你。
非常感谢,我的是1014030682,密码权限是why 我只是路过打酱油的。向你学习 我只是路过打酱油的。 路过看看…………
页:
[1]