LinkedList with Char(String Issue

时间:2015-04-05 05:36:08

标签: c linked-list

所以我对我正在使用的结构的代码有疑问。我希望我的结构能够添加,检索或排序,但我遇到了很多结构问题。如果我只使用数字但我需要使用3个字符串。一个用于名字,姓氏和电话号码,但我无法想象。

这是我现在的代码:

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

struct node
{
    int data;
    char first[15];
    char last[15];
    char phone[12];
    struct node *next;
}*head;



void append(int num, char f[15], char l[15],char p[12])
{
    struct node *temp, *right;
    temp = (struct node *)malloc(sizeof(struct node));
    temp->data = num;
    strcpy(temp->first, f);
    strcpy(temp->last, l);
    strcpy(temp->phone, p);
    right = (struct node *)head;
    while (right->next != NULL)
        right = right->next;
    right->next = temp;
    right = temp;
    right->next = NULL;
}



void add(int num, char f[15], char l[15],char p[12])
{
    struct node *temp;
    temp = (struct node *)malloc(sizeof(struct node));
    temp->data = num;
    strcpy(temp->first, f);
    strcpy(temp->last, l);
    strcpy(temp->phone, p);
    if (head == NULL)
    {
        head = temp;
        head->next = NULL;
    }
    else
    {
        temp->next = head;
        head = temp;
    }
}
void addafter(int num, char f[15], char l[15],char p[12],int loc)
{
    int i;
    struct node *temp, *left, *right;
    right = head;
    for (i = 1; i<loc; i++)
    {
        left = right;
        right = right->next;
    }
    temp = (struct node *)malloc(sizeof(struct node));
    temp->data = num;
    strcpy(temp->first, f);
    strcpy(temp->last, l);
    strcpy(temp->phone, p);
    left->next = temp;
    left = temp;
    left->next = right;
    return;
}



void insert(int num, char f[15], char l[15],char p[12])
{
    int c = 0;
    struct node *temp;
    temp = head;
    if (temp == NULL)
    {
        add(num,f,l,p);
    }
    else
    {
        while (temp != NULL)
        {
            if (temp->data<num)
                c++;
            temp = temp->next;
        }
        if (c == 0)
            add(num,f,l,p);
        else if (c<count())
            addafter(num,f,l,p, ++c);
        else
            append(num,f,l,p);
    }
}



int delete(int num)
{
    struct node *temp, *prev;
    temp = head;
    while (temp != NULL)
    {
        if (temp->data == num)
        {
            if (temp == head)
            {
                head = temp->next;
                free(temp);
                return 1;
            }
            else
            {
                prev->next = temp->next;
                free(temp);
                return 1;
            }
        }
        else
        {
            prev = temp;
            temp = temp->next;
        }
    }
    return 0;
}


void  display(struct node *r)
{
    r = head;
    if (r == NULL)
    {
        return;
    }
    while (r != NULL)
    {
        printf("%d ", r->data);
        r = r->next;
    }
    printf("\n");
}


int count()
{
    struct node *n;
    int c = 0;
    n = head;
    while (n != NULL)
    {
        n = n->next;
        c++;
    }
    return c;
}


int  main()
{
    int i, num;
    char fname[15], lname[15], phone[12];
    struct node *n;
    head = NULL;
    while (1)
    {
        printf("\nList Operations\n");
        printf("===============\n");
        printf("1.Insert\n");
        printf("2.Display\n");
        printf("3.Retrieve\n");
        printf("4.Delete\n");
        printf("5.Exit\n");
        printf("Enter your choice : ");
        if (scanf("%d", &i) <= 0){
            printf("Enter only an Integer\n");
            exit(0);
        }
        else {
            switch (i)
            {
            case 1:     
                printf("Enter the id, first, last and phone (Separte with space) : ");
                scanf("%d %s %s %s", &num,fname,lname,phone);
                insert(num,fname,lname,phone);
                break;
            case 2:     
                if (head == NULL){
                    printf("List is Empty\n");
                }else{
                    printf("Element(s) in the list are : ");
                }
                display(n);
                break;
            case 3:     
                //To be made
                //scanf("Retrieve this : %d\n", count());
                break;
            case 4:     
                if (head == NULL){
                    printf("List is Empty\n");
                }else{
                    printf("Enter the number to delete : ");
                    scanf("%d", &num);
                    if (delete(num))
                        printf("%d deleted successfully\n", num);
                    else
                        printf("%d not found in the list\n", num);
                }
                break;
            case 5:     
                return 0;
            default:    
                printf("Invalid option\n");
            }
        }
    }
    return 0;
}

感谢任何可以解释我的问题并解决它的人。

1 个答案:

答案 0 :(得分:0)

你到处都有:

temp->data = num;

添加行

strcpy(temp->first, f);
strcpy(temp->last, l);
strcpy(temp->phone, p);