在c中打印链表中的节点

时间:2016-06-22 08:54:02

标签: c struct printing insert linked-list

这是一个程序,它将2个名称2个路径和2个持续时间s插入链表(链表的结构),打印它们,并在第一个节点的持续时间为8时在它们之间交换。 但是当程序打印节点时,它从所有节点打印出最后一个节点的名称和路径 请帮帮我

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Frame
{
    char            *name;
    unsigned int    duration;
    char            *path;  // may change to FILE*
}*n3;

typedef struct Frame frame_t;

struct Link
{
    frame_t *frame;
    struct Link *next;
}*n ;

typedef struct Link link_t;

struct Link* insert(struct Link *n3);
void print(struct Link* head, int flag);
void swap(struct Link **head, int value);

#define MAX_PATH_SIZE (256)
#define MAX_NAME_SIZE (50)

int main()
{
    struct Link* head = NULL;
    int flag = 0;
    int num = 0;
    char namearray[MAX_NAME_SIZE] = { 0 };
    char patharray[MAX_PATH_SIZE] = { 0 };
    printf("1\n");
    printf("\n");
    for (int i = 0; i < 2; i++)
    {
        printf("Enter a number you want to insert - ");
        scanf("%d", &num);
        printf("\nEnter the name -  ");
        scanf("%s", &namearray);
        printf("\nEnter the path - ");
        scanf("%s", &patharray);
        printf("\n");
        head = insert(head,num,namearray,patharray);
    }
    print(head, flag);
    swap(&head, 8);


    printf("1\n");
    system("pause");
    return 0;
}

struct Link *insert(struct Link *p, int n, char namearray[MAX_NAME_SIZE], char patharray[MAX_PATH_SIZE]) //insert func
{
    struct node *temp;
    if (p == NULL) //if the node is empty
    {
        p = (struct Link *)malloc(sizeof(struct Link)); //gives memory to the node
        p->frame = (struct Frame *)malloc(sizeof(struct Frame));
        if (p == NULL)
        {
            printf("Error\n");
        }
        else
        {
            printf("The number added to the end of the list\n");
        }
        p->frame->duration = n; //its runing untill the node item is NULL
        p->frame->name = namearray;
        p->frame->path = patharray;
        p->next = NULL;
    }
    else
    {
        p->next = insert(p->next, n , namearray , patharray);/* the while loop replaced by
                                     recursive call */
    }
    return (p);
}

void print(struct Link* head , int flag)//print func
{
    if (head == NULL && flag == 0) //if the node is empty
    {
        printf("The list is empty\n");
        return 1;
    }
    if (head == NULL && flag != 0) //if the node isnt empty but we are in the NULL (last) item of the node
    {
        printf("\n");
        printf("the nodes of the list printed\n");
        return;
    }
    printf("%d  ", head->frame->duration);//prints the currect item
    printf("\n");
    printf("%s  ", head->frame->name);//prints the currect item
    printf("\n");
    printf("%s  ", head->frame->path);//prints the currect item
    printf("\n");
    print(head->next, ++flag);//calls the func recursevly
    return 1;
}

void swap(struct Link **head, int value)
{
    while (*head && (*head)->frame->duration != value)
    {
        head = (*head)->next;
    }

    if (*head && (*head)->next)
    {
        struct list *next = (*head)->next->next;
        (*head)->next->next = *head;
        *head = (*head)->next;
        (*head)->next->next = next;
    }
}

这是印刷品: the print of the program

0 个答案:

没有答案