c语言编程求解,数据结构?

 我来答
自我编程
2019-11-09 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

方法很多,可以在插入数据后再对线性表进行删改,也可以在插入前进行处理。

我这里代码是在插入前处理。

(注释掉的函数int getPNUM(struct Sqlist *st,int n);是我预留的,题2如果你想改成插入后,再对线性表素数进行查找,可以用这个函数。否则可以删除)。

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#define LIST_INIT_SIZE 800

struct Sqlist{

    int *elem;

    int length;

    int listsize;

};

int insert2List(struct Sqlist *st,int num,int inx);//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0

int findNum(struct Sqlist *st,int num);//在线性表中查找指定数字,存在返回1,不存在返回0

//int getPNUM(struct Sqlist *st,int n);//查找素数,返回第几n个素数的下标。未找到返回-1

void showList(struct Sqlist *st);//打印线性表

void clearList(struct Sqlist *st);//清空线性表

int main()

{

    int i,k,nums[LIST_INIT_SIZE],n,num,cnt,flag;

    struct Sqlist st={nums,0,LIST_INIT_SIZE};

    srand(time(NULL));


//--------------题1-----------------------------------------------------------------------

    n=100;

    k=1;

    printf("1、随机生成100个【100,200】之间的随机数,去除重复并保存到线性表\n");

    while(n--)

    {

        num=rand()%101+100;

        printf("--%3d产生随机数%d\n",k++,num);

        if(findNum(&st,num))

            printf("该数字已在线性表中存在,重复去除\n");

        else

        {

            if(insert2List(&st,num,st.length+1))

                printf("该随机值已保存到线性表尾部\n");

            else{

                printf("异常!插入失败!\n");

                return 1;

            }


        }

    }

    showList(&st);


    clearList(&st);

//-------------题2----------------------------------------------------------------

    n=20;

    cnt=0;

    k=1;

    printf("1、随机生成20个【1,200】之间的随机数,在第一个素数后插入1个0,第二个素数后插入2个0,以此类推,最后输出所有元素\n");

    while(n--)

    {

        num=rand()%200+1;

        printf("--%3d产生随机数%d\n",k++,num);

        flag=1;

        for(i=2;i<num;i++)

            if(num%i==0)

            {

                flag=0;

                break;

            }

        if(flag)

        {

            cnt++;

            printf("该随机值是一个素数,在其尾部插入%d个0\n",cnt);

            for(i=0;i<cnt;i++)

                num*=10;

            printf("该随机值变更为%d\n",num);

        }

        if(insert2List(&st,num,st.length+1))

            printf("该随机值已保存到线性表尾部\n");

        else{

            printf("异常!插入失败!\n");

            return 1;

        }


    }

    showList(&st);

    return 0;

}

void clearList(struct Sqlist *st)//清空线性表

{

    st->length=0;

    printf("线性表数据已清除\n");

}

void showList(struct Sqlist *st)//打印线性表

{

    int i;

    printf("当前线性表的数据为:\n");

    for(i=0;i<st->length;i++)

        printf("%d ",st->elem[i]);

    printf("\n");

}

int findNum(struct Sqlist *st,int num)//在线性表中查找指定数字,存在返回1,不存在返回0

{

    int *p=st->elem;

    while(p<=&st->elem[st->length-1])

        if(*p++==num)

            return 1;

    return 0;

}

/*

int getPNUM(struct Sqlist *st,int n)//查找素数,返回第几n个素数的下标。未找到返回-1

{

    int i,j,flag,cnt=0;

    for(i=0;i<st->length;i++)

    {

        flag=1;

        for(j=2;j<st->elem[i];j++)

            if(st->elem[i]%j==0)

            {

                flag=0;

                break;

            }

        if(flag)

            cnt++;

        if(cnt==n)

            return i;

    }

    return -1;

}

*/

int insert2List(struct Sqlist *st,int num,int inx)//向线性表第inx个元素的位置插入一个元素。成功返回1,失败返回0

{

    int i;

    if(st->length==st->listsize)

    {

        printf("线性表已满,插入失败!\n");

        return 0;

    }

    if(inx<1 && inx>st->length+1)

    {

        printf("插入位置无效!线性表当前数据长度为%d,插入位置必须大于1且不能大于%d!\n",st->length,st->length+1);

        return 0;

    }

    for(i=st->length;i>=inx;i--)

        st->elem[i]=st->elem[i-1];

    st->elem[inx-1]=num;

    st->length++;

    return 1;

}

初试锋芒天啊
2019-11-08 · TA获得超过176个赞
知道小有建树答主
回答量:236
采纳率:71%
帮助的人:110万
展开全部
#include <stdio.h>
#include <stdlib.h>

#define LISTINIT_SIZE 800

typedef struct SqList
{
int *elem; // 表指针
int length; // 表中现有元素个数
int listSize; // 表容量
} sqList;

void init(sqList *list)
{
list->elem = (int*)malloc(sizeof(int) * LISTINIT_SIZE);
int i = 0;
for (; i< LISTINIT_SIZE; i++)
{
list->elem[i] = 0;
}
list->length = 0;
list->listSize = LISTINIT_SIZE;
}

// 实验内容1
void generate(sqList *list)
{
srand((unsigned)time(NULL));
int i = 0;
for (; i < 100; i++)
{
int rd = rand()%100 + 100;
int j = i - 1;
for (; j > 0; j--)
{
if (rd == list->elem[j])
{
break;
}
}
if (rd != list->elem[0] && j == 0)
{
list->elem[i] = rd;
}
}
}

// 实验内容2
void generate2(sqList *list)
{
srand((unsigned)time(NULL));
int i = 0;
int j = 0;
for (; i < 20; i++)
{
int rd = rand()%200;
list->elem[j+i+1] = rd;
j = j + i + 1;
}
}

int main()
{
sqList list;
init(&list);
generate(&list);
int i=0;
for (; i<300;/*LISTINIT_SIZE*/ i++)
{
int tmp = list.elem[i];
if (tmp) // 实验内容1,实验内容2的时候注释掉此判断语句
printf("%d %d\n", tmp, i);
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tommrry
2019-11-08 · TA获得超过133个赞
知道小有建树答主
回答量:209
采纳率:33%
帮助的人:74万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LIST_INIT_SIZE 800
//typedef int Elemtyp;
//typedef int Status;
typedef struct {
int *elem;
int length;
int listsize;
}SqList;
int InitList_Sq(SqList &L)
{
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
L.length=0;
L.listsize=LIST_INIT_SIZE;
return 1;

}
void CreateList(SqList &L)
{
int i,j=1,count=1;
for(i=0;i<100;i++)
{
L.elem[i]=rand()%100+100;
L.length++;

}
while(j<L.length)
{
for(i=0;i<count;++i)
{

if(L.elem[i]==L.elem[j])
break;
}
if(i==count)
L.elem[count++]=L.elem[j++];
else
j++;
}
L.length=count;

}

void show(SqList &L)
{
for(int i=0;i<L.length;i++)
{
printf("%d ",L.elem[i]);
}
printf("\n");
printf("显示成功%d",L.length);
}
int main()
{
//printf("创建列表");
SqList Li;
InitList_Sq(Li);
//printf("列表去重");
CreateList(Li);
//printf("显示列表");
show(Li);
//printf("看看结果");
}

第二个功能你自己弄吧,如果不会,加我扣扣
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pieryon
2019-11-09 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166869
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
数据结构刚开始就不会了、是不是后面的实验都要百度上提问啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大尘涵0p
2019-11-08
知道答主
回答量:50
采纳率:0%
帮助的人:3.3万
展开全部
可、以、说、说、具、体、的、要、求、么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式