C语言之链表的实现

2017-09-02  本文已影响13人  冰三尺
#include <stdio.h>
#include <stdlib.h> //包含了malloc

typedef struct Node {
    int data; //数据域
    struct Node *next; //指针域
}NODE, *PNODE;  //NODE 等价于struct Node, PNODE等价于struct Node *

PNODE create_list(void);
void traverse_list(PNODE phead);

int main(int argc, const char * argv[]) {

    PNODE pHead = NULL; //等价于struct Node *pHead = NULL
    
    pHead = create_list(); //创建一个非循环链表, 并将该链表的投节点的地址赋值给头结点
    traverse_list(pHead); //
    return 0;
}

PNODE create_list(void) {
    
    //分配了一个不存放数据的头结点
    PNODE pHead = (PNODE)malloc(sizeof(NODE));
    if (pHead == NULL) {
        printf("分配失败");
        exit(-1);
    }
    int len;
    printf("请输入你要生成的链表节点的个数: ");
    scanf("%d", &len);
    
    int i; //存放有效节点的个数
    int value; //用来临时存放用户输入的节点的值
    PNODE pTail = pHead;
    pTail->next = NULL;
    
    for (i = 0; i < len; i++) {
        printf("请输入第%d个节点的值: ", i + 1);
        scanf("%d", &value);
        
        PNODE pNew = (PNODE)malloc(sizeof(NODE));
        if (pNew == NULL) {
            printf("程序分配失败");
            exit(-1);
        }
        pNew->data = value;
        pTail->next = pNew;
        pNew->next = NULL;
        pTail = pNew; //pTail始终指向为节点
    }
    return pHead;
}

void traverse_list(PNODE phead) {
    PNODE p = phead->next;

    while (p != NULL) {
        printf("%d  ", p->data);
        p = p->next;
    }
    printf("\n");
    return;
}
上一篇 下一篇

猜你喜欢

热点阅读