链表创建和链表遍历算法

来源:互联网 发布:淘宝店打折怎么设置 编辑:程序博客网 时间:2024/06/05 12:01
#include<stdio.h>#include<malloc.h>#include<stdlib.h>//用结构体来构造节点的数据域和指针域,即定义了一个 struct Node数据类型typedef struct Node{   int data;//构造数据域   struct Node * pNext;//构造指针域,pNext 指向一个和本身数据类型相同的下一个节点}NODE, *PNODE;//NODE相当于 struct Node, *PNODE相当于 struct Node *//函数声明PNODE create_list(void );void traverse_list(PNODE pHead);//遍历链表int main(void){    PNODE pHead = NULL;//等价于 struct Node * pHead=NULL;    pHead = create_list();//创建一个非循环单链表,并将该链表的头结点地址赋给pHead    traverse_list(pHead);//遍历链表    return 0;}PNODE create_list(void) //生成链表,返回类型为一个地址{    int i;    int val;//用来临时存放用户输入的节点的值    int len;//用来存放有效节点的个数    //分配一个不存放有效数据的头节点    PNODE pHead=(PNODE)malloc(sizeof(NODE));//为pHead分配一块内存,pHead指向头结点    if(NULL==pHead)    {        printf("分配失败,终止\n");        exit(-1);    }    //创建尾指针pTail,使pTail永远指向尾节点;    PNODE pTail=pHead;    pHead->pNext=NULL;    printf("请输入链表结点的个数:len=");    scanf("%d",&len);    for(i=0;i<len;i++)//输入数据,生成len 个有效节点    {        printf("请输入第%d个节点的值:",i+1);        scanf("%d",&val);        //创建一个新节点pNew        PNODE pNew=(PNODE)malloc(sizeof(NODE));        if(NULL==pNew)        {        printf("分配失败,终止\n");        exit(-1);        }        //使循环所得的数全部依次插入在链表的最后,即把新节点 pNew 挂到尾节点后面        pNew->data=val;//pNew的数据域存放节点的值        pTail->pNext=pNew;//尾指针pTail的指针域指向pNew        pNew->pNext=NULL;//使新节点变成尾节点        pTail=pNew;//pTail就指向了尾节点(新节点)    }    return pHead;}void traverse_list(PNODE pHead)//遍历链表{    PNODE p=pHead->pNext;//p指向有效节点    while(NULL!=p)    {        printf("%d ",p->data);//输出有效节点的数据        p=p->pNext;//指向下一个节点,一旦循环到最后一个节点,p->pNext=NULL,循环终止    }    printf("\n");    return ;//函数执行完毕}
原创粉丝点击