list_链表的常用操作

来源:互联网 发布:淘宝怎么退货怎么邮寄 编辑:程序博客网 时间:2024/05/18 04:20
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{    int data;               //数据域    struct Node * pNext;    //指针域}NODE,*PNODE;   //NODE等价于struct Node, PNODE等价于struct Node *//函数声明PNODE create_list(void);void traverse_list(PNODE pHead);bool is_empty(PNODE pHead);int length_list(PNODE pHead);void sort_list(PNODE pHead);bool insert_list(PNODE, int, int);bool delete_list(PNODE, int, int *);int main(void){    PNODE pHead = NULL;    pHead = create_list();  //create_list()功能:创建一个非循环单链表,并将该链表的头节点的地址赋给pHead    traverse_list(pHead);    insert_list(pHead,4,33);    traverse_list(pHead);//  int len = length_list(pHead);//  printf("链表的长度是:%d\n",len);//  sort_list(pHead);//  traverse_list(pHead);/*    if (is_empty(pHead))    {        printf("链表为空!\n");    }else{        printf("链表不空!\n");    }*/    return 0;}PNODE create_list(void){    int i;    int len;    //用来存放有效节点的个数    int val;    //用来临时存放用户输入的节点的值    //分配了一个不存放有效数据的头节点    PNODE pHead = (PNODE)malloc(sizeof(NODE));    if (NULL == pHead)    {        printf("分配失败,程序终止!\n");        exit(-1);    }    PNODE pTail = pHead;    pTail->pNext = NULL;    printf("请输入您要生产的链表节点的个数:len = ");    scanf("%d",&len);    for (i=0; i<len; ++i)    {        printf("请输入第%d个节点的值:",i+1);        scanf("%d",&val);        PNODE pNew = (PNODE)malloc(sizeof(NODE));        if (NULL == pNew)        {            printf("分配失败,程序终止!\n");            exit(-1);        }        pNew->data = val;        pTail->pNext = pNew;        pNew->pNext = NULL; //pnew指针域置NULL        pTail = pNew;    }    return pHead;}void traverse_list(PNODE pHead){    PNODE p = pHead->pNext;    while (NULL != p)    {        printf("%d ",p->data);        p = p->pNext;    }    printf("\n");    return;}bool is_empty(PNODE pHead){    if (NULL == pHead->pNext)        return true;    else        return false;}int length_list(PNODE pHead){    PNODE p = pHead->pNext;    int len = 0;    while(NULL != p)    {        ++len;        p = p->pNext;    }    return len;}void sort_list(PNODE pHead){    int i,j,tmp;    int len = length_list(pHead);    PNODE p ,q;    for (i=0,p=pHead->pNext; i<len-1; ++i,p=p->pNext)    {        for (j=i+1,q=p->pNext; j<len; ++j,q=q->pNext)        {            if (p->data > q->data)  //类似于数组中的:a[i] > a[j]            {                 tmp = p->data;      //类似于数组中的:tmp = a[i];                p->data = q->data;  //类似于数组中的:a[i] = a[j];                q->data = tmp;      //类似于数组中的:a[j] = tmp;            }        }    }    return;}//在pHead所指向链表的第pos个节点的前面插入一个新节点,该节点值为valbool insert_list(PNODE pHead, int pos, int val){    int i = 0;    PNODE p = pHead;    while (NULL != p && i<pos-1)    {        p = p->pNext;        ++i;    }    if (i>pos-1 || NULL == p)        return false;    PNODE pNew = (PNODE)malloc(sizeof(NODE));    if (NULL == pNew)    {        printf("动态内存分配失败!\n");        exit(-1);    }    pNew->data = val;    PNODE q = p->pNext;    p->pNext = pNew;    pNew->pNext = q;    return true;}
0 0
原创粉丝点击