线性表的链式存储结构

来源:互联网 发布:c语言中换行符是 编辑:程序博客网 时间:2024/05/14 17:44
#include <stdio.h>#include <malloc.h>#include <stdlib.h>typedef struct Node{    int val;    struct Node * pNext;}Node,* PNode;void init_list(PNode pHead);void show_list(PNode pHead);int is_empty(PNode pHead);void insert_list(PNode pHead,int pos,int val);int get_list_length(PNode pHead);int delete_list(PNode pHead,int pos);void sort_list(PNode pHead);int main(void){    PNode pHead = (PNode)malloc(sizeof(Node));//注意这个地方不能写成PNode pHead;    init_list(pHead);        printf("%s\n", "初始化之后的结果:");    show_list(pHead);        insert_list(pHead,1,11);    insert_list(pHead,2,22);    insert_list(pHead,3,33);    printf("%s\n", "插入之后的结果:");        show_list(pHead);    printf("线性表的长度为:%d\n",get_list_length(pHead));    printf("删除的节点为:%d\n",delete_list(pHead,1));    printf("%s\n", "删除之后的结果是:");    show_list(pHead);    sort_list(pHead);    printf("%s\n", "排序之后的结果是:");    show_list(pHead);    return 0;}void init_list(PNode pHead){    PNode pTail = pHead;    pTail->pNext=NULL;    int len;    scanf("%d",&len);    int i;    for(i=0;i<len;i++){        int val;        scanf("%d",&val);        PNode pNew = (PNode)malloc(sizeof(Node));        pNew->val=val;        pTail->pNext=pNew;        pNew->pNext=NULL;        pTail=pNew;    }}void show_list(PNode pHead){    PNode pNext = pHead->pNext;    while(pNext!=NULL){        printf("%d ", pNext->val);        pNext=pNext->pNext;    }    printf("\n");}int is_empty(PNode pHead){    if(NULL==pHead->pNext){        return 1;    }else{        return 0;    }}void insert_list(PNode pHead,int pos,int val){    int i=1;    if(pos<i||pos>get_list_length(pHead)+1){        printf("%s\n", "插入的位置不存在!");        exit(-1);    }else if(pHead==NULL){        printf("%s\n", "头指针不能为空!");        exit(-1);    }    PNode p = pHead;    while(p->pNext!=NULL&&i<pos){        p=p->pNext;        i++;    }//while执行完,这个时候,p位于pos-1个节点上    PNode t = p->pNext;    PNode pNew = (PNode)malloc(sizeof(Node));    p->pNext=pNew;    pNew->pNext=t;    pNew->val=val;}int get_list_length(PNode pHead){    int cnt =0;    PNode p = pHead;    while(p->pNext!=NULL){        cnt++;        p=p->pNext;    }    return cnt;}int delete_list(PNode pHead,int pos){    int i =1;    PNode p = pHead;    if(pos<i||pos>get_list_length(pHead)){        printf("%s\n", "要删除的位置不正确!");        exit(-1);    }    while(p->pNext!=NULL&&i<pos){        p=p->pNext;        i++;    }    PNode temp = p->pNext;    p->pNext=temp->pNext;    int val = temp->val;        free(temp);    temp=NULL;    return val;}void sort_list(PNode pHead){    int i,j,t;    int len = get_list_length(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->val>q->val){                t = p->val;                p->val = q->val;                q->val = t;            }        }    }}

0 0
原创粉丝点击