| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2705 人关注过本帖, 1 人收藏
标题:关于单链表的顺序插入与逆序插入,用C语言
只看楼主 加入收藏
诠释0x208
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-22
结帖率:50%
收藏(1)
已结贴  问题点数:20 回复次数:6 
关于单链表的顺序插入与逆序插入,用C语言
题目为:随机生成100个整数,范围在1~999之间,如果第一个随机数为偶数,将这100个随机数按生成次序插入到链表中;如果第一个数为奇数,将这100个数逆序插入到链表中,最后输出整个链表。要求编写两个插入函数(分别叫insert_head和insert_tail)
题目给的部分代码:
linkedlist.h
#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_

struct Node
{
    int element;
    struct Node *next;
};

#endif
main3.c(部分代码)
#include <stdio.h>
#include <stdlib.h>
#include "linkedlist.h"

void printlist(struct Node *h)
{
    struct Node *p;
    p = h->next;
    while (p != NULL)
    {
        printf("%d ", p->element);
        p = p->next;
    }
    printf("\n");
}

int main()
{
    struct Node *header;
    void (*insert)(struct Node *, int); // insert func pointer

    header = malloc(sizeof(struct Node));
    header->next = NULL;

    /* ---your codes --- */
 
    printlist(header);
}

以及自己写的代码(自己没写出来):
#include <malloc.h>
#include <stdio.h>
#include<stdlib.h>
#include <math.h>

typedef struct node
{
int num;
struct node *next;
}node,*pnode;


/*在链表头进行插入,新节点成为头节点,原头节点成为新节点的下一个节点,头节点指针后伊一位*/
void insert_head(pnode *phead,int data)
{
pnode p;
p=(pnode)malloc(sizeof(sizeof(node)));
if(NULL==p)
{
perror("malloc fail");
exit(1);
}
p->num=data;
p->next=(*phead);
(*phead)=p;
}


/*在链表尾进行插入*/
void insert_tail(pnode *phead,int data)
{
pnode p; // 插入的新结点
pnode p2=(*phead); //链表中的指针初始化,否则会发生段错误
p=(pnode)malloc(sizeof(sizeof(node)));
if(NULL==p)
{
perror("malloc fail");
exit(1);
}
p->next=NULL;
p->num=data;
if(*phead)
{
while(p2->next) //遍历链表,找到鏈表末尾节点
{
p2=p2->next;
}
p2->next=p;
}

}

void printf_list(pnode head)
{


while(head)
{
printf("%d\n",head->num);
head=head->next;
}
printf("\n");
}


void main(void)
{
int a[100];
int i;

srand(time(0));
struct node *head=NULL;


for(i=0;i<2;i++){
    a[i]=rand()%100;
    insert_head(&head,a[i]);
                }

for(i=0;i<2;i++){
    a[i]=rand()%100;
    insert_tail(&head,a[i]);
                    }
      




printf_list(head); //测试打印



}
希望各位大佬指点迷津,最好按题目补充代码。
搜索更多相关主题的帖子: 插入 struct Node int next 
2018-04-26 23:37
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:20 
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct node
{
    int num;
    struct node *next;
} node,*pnode;


/*在链表头进行插入,新节点成为头节点,原头节点成为新节点的下一个节点,头节点指针后伊一位*/
pnode insert_head(pnode phead,int data)
{
    pnode p;
    p=(pnode)malloc(sizeof(sizeof(node)));
    if(NULL==p)
    {
        perror("malloc fail");
        exit(1);
    }
    p->num=data;
    p->next=phead;
    return p;
}


/*在链表尾进行插入*/
pnode insert_tail(pnode phead,int data)
{
    pnode p, p2; // 插入的新结点
    p=(pnode)malloc(sizeof(sizeof(node)));
    if(NULL==p)
    {
        perror("malloc fail");
        exit(1);
    }
    p->next=NULL;
    p->num=data;
    if (phead)
    {
        for (p2=phead; p2->next; p2=p2->next);
        p2->next = p;
    }
    else
        phead = p;
    return phead;
}

void printf_list(pnode head)
{
    for (; head; head=head->next)
        printf("%d\n",head->num);
    printf("\n");
}

void main(void)
{
    int a[100];
    int i;
    srand(time(0));
    struct node *head=NULL;

    for(i=0; i<10; i++)
    {
        a[i]=i;//rand()%100;
        head = insert_head(head,a[i]);
    }

    for(; i<20; i++)
    {
        a[i]=i;//rand()%100;
        head = insert_tail(head,a[i]);
    }
   
    printf_list(head); //测试打印
}
2018-04-27 05:38
诠释0x208
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-22
收藏
得分:0 
是假如生成的第一个随机数为偶数,顺序插入链表,为奇数,逆序插入链表。
2018-04-27 10:40
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用诠释0x208在2018-4-27 10:40:58的发言:

是假如生成的第一个随机数为偶数,顺序插入链表,为奇数,逆序插入链表。

if 第一个随机数&1
    逆序插入链表
else
    顺序插入链表
2018-04-27 11:32
诠释0x208
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-22
收藏
得分:0 
我用的是这样的方法,一直报错,所以希望大佬帮我写一下主函数。
2018-04-27 12:22
诠释0x208
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-22
收藏
得分:0 
回复 4楼 吹水佬
if(a[0]%2==0) {
    a[i]=rand()%100;
    for(i=0;i<2;i++){
    head=insert_head(&head,a[i]);
                }


    for(i=0;i<2;i++){
   
    head=insert_tail(&head,a[i]);
                    }
      
   
}

截图报错,void value not ignored as it ought to be.
2018-04-27 12:24
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
回复 6楼 诠释0x208
void main(void)
{
    int a[100];
    int i;
    srand(time(0));
    struct node *head=NULL;
    for(i=0; i<10; i++)
        a[i]=rand()%100;
    for(i=0; i<10; i++)
        printf("%d\n", a[i]);
    printf("\n");
    if (a[0]&1)
        for(i=0; i<10; i++)
            head = insert_head(head,a[i]);
    else
        for(i=0; i<10; i++)
            head = insert_tail(head,a[i]);
    printf_list(head); //测试打印
}
2018-04-27 14:47
快速回复:关于单链表的顺序插入与逆序插入,用C语言
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033757 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved