链表创建和链表遍历操作

来源:互联网 发布:手机虚拟歌姬软件 编辑:程序博客网 时间:2024/06/13 09:23

实现的方法

PNODE create(void);void travers(PNODE);bool empty(PNODE);int  length(PNODE);void sort(PNODE);bool insert(PNODE, int, int);bool del(PNODE, int, int*);

全部代码

#include <stdio.h>#include <malloc.h>#include <stdlib.h>/* * 单链表*/typedef struct Node{    int data;    //数据      struct Node *pNext; //下一个节点指针}NODE, *PNODE;PNODE create(void);void travers(PNODE);bool empty(PNODE);int  length(PNODE);void sort(PNODE);bool insert(PNODE, int, int);bool del(PNODE, int, int*);int main(void){    PNODE pHead = NULL;    pHead = create();    if (empty(pHead)){        printf("链表为空");    }    int len = length(pHead);    printf("lenght:%d \n", len);    travers(pHead);    printf("sort");    sort(pHead);    travers(pHead);    int pVal;    del(pHead, 2, &pVal);    printf("del,pos:%d,val%d", 2, pVal);    travers(pHead);    insert(pHead, 3, 122);    printf("insert,pos:%d,val%d", 3, 122);    travers(pHead);    system("pause");    return 0;}PNODE create(void){    int len; //节点个数    int val; //节点值    int i;    printf("请输入节点个数len: ");    scanf("%d", &len);    PNODE pHead = (PNODE)malloc(sizeof(NODE));    pHead->pNext = NULL;    PNODE pTial = (PNODE)malloc(sizeof(NODE));    pTial = pHead;    for (i = 0; i < len; i++)    {        printf("请输入第%d个 :", i + 1);        scanf("%d", &val);        PNODE pNew = (PNODE)malloc(sizeof(NODE));        pNew->data = val;        pNew->pNext = NULL;        //把pNew 新节点挂到pTail后面        pTial->pNext = pNew;        pTial = pNew;    }    return pHead;}void travers(PNODE pHead){    if (empty(pHead)) return ;    PNODE p = pHead->pNext;    printf("[");    while (NULL != p)    {        printf(" %d, ", p->data);        p = p->pNext;    }    printf("]\n");    return;}bool empty(PNODE pNode){    if (NULL == pNode->pNext)        return true;    else        return false;}int length(PNODE pNode){    int length = 0;    PNODE p;    p = pNode->pNext;    while (NULL != p)    {        ++length;        p = p->pNext;    }    return length;}void sort(PNODE pNode){    PNODE p, q;    int i, j, t;    int len = length(pNode);    for (i = 0, p = pNode->pNext; i < len - 1; ++i, p = p->pNext)    {        for (j = i + 1, q = p->pNext; j < len - 1; q = q->pNext, ++j)        {            if (p->data > q->data){                t = p->data;                p->data = q->data;                q->data = t;            }        }    }}bool insert(PNODE pNode, int pos, int val){    int i = 0;    PNODE p = pNode;    while (NULL != p->pNext && i > pos - 1)    {        p = p->pNext;        ++i;    }    if (i > pos || NULL == p){        return false;    }    PNODE pNew = (PNODE)malloc(sizeof(NODE));    pNew->data = val;    PNODE q = p->pNext;    p->pNext = pNew;    pNew->pNext = q;    return true;}bool del(PNODE pNode, int pos, int * pVal){    int i = 0;    PNODE p = pNode;    while (NULL != p->pNext && i < pos - 1)    {        p = p->pNext;        ++i;    }    if (i > pos - 1 || NULL == p->pNext){        return false;    }    PNODE q;    q = p->pNext;    *pVal = q->data;    p->pNext = p->pNext->pNext;    free(q);    q = NULL;    return true;}
原创粉丝点击