链表的操作(未解决,排序后无法正确进行插入和删除)

来源:互联网 发布:上海网站推广优化公司 编辑:程序博客网 时间:2024/06/07 20:07
#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef struct St{int data;St* pNext;}NODE,*PNODE;PNODE creat_List(PNODE pHead){int len = 0;int val = 0;int i ;pHead = (PNODE)malloc(sizeof(NODE));if(pHead == NULL){printf("内存分配失败\n");exit(-1);}PNODE pTail = pHead;pTail->pNext = NULL;printf("请输入创造的节点数\n");scanf("%d",&len);for(i = 0; i < len;i++){PNODE pNew = (PNODE)malloc(sizeof(NODE));if(NULL == pNew){printf("节点分配失败\n");exit(-1);}printf("请输入节点的值(一个一个来)\n");scanf("%d",&val);pNew->data = val;pTail->pNext = pNew;pNew->pNext = NULL;pTail = pNew;}return pHead;}void travse_List(PNODE pHead ){PNODE p = pHead->pNext;int val;while(p != NULL){val = p->data;printf("%d ",val);p = p->pNext;}printf("\n");}void travse_List_sort(PNODE pHead ){PNODE p = pHead;int val;while(p != NULL){val = p->data;p = p->pNext;if(p!=NULL)printf("%d ",val);}printf("\n");}void insert_List(PNODE pHead,int n){PNODE p = pHead;int val;int j = 1;while(j < n ){j++;p = p->pNext;}PNODE pNew = (PNODE)malloc(sizeof(NODE));if(NULL == pNew){printf("内存分配失败\n");exit(-1);}printf("请输入插入节点的值\n");scanf("%d",&val);pNew->data = val;pNew->pNext = p->pNext;p->pNext = pNew;}void delete_List(PNODE pHead,int m){PNODE p = pHead;int j = 1;while(j < m ){        j++;p = p->pNext;}PNODE q = p->pNext;p->pNext = q->pNext;free(q);}PNODE sort_list(PNODE pHead){    PNODE s=NULL;    PNODE r=pHead;    while(r!=NULL)    {         PNODE t=r->pNext;         PNODE cp=s;         PNODE ap=NULL;         while(cp!=NULL)         {             if(r->data < cp->data)                break;             else             {                 ap=cp;                 cp=cp->pNext;             }         }         if(ap==NULL)         {             r->pNext=s;             s=r;         }         else         {             r->pNext=cp;             ap->pNext=r;         }         r=t;    }    return s;}int main(){    PNODE pHead = NULL;    int n = 0;    int m = 0;    pHead = creat_List( pHead);//创造节点    travse_List(pHead );//遍历输出    int t;    printf("1.插入值请按1\n2.删除值请按2\n3.排序请按3\n4.退出请按任意键\n");    while(1)    {        scanf("%d",&t);        if(t==1)        {            printf("输入在第几个节点前插入");            scanf("%d",&n);            insert_List( pHead,n);//插入节点            travse_List(pHead );        }        else if(t==2)        {            printf("输入第几个节点删除");                scanf("%d",&m);            delete_List( pHead, m);//删除节点            travse_List(pHead );        }        else if(t==3)        {            pHead=sort_list(pHead);            travse_List_sort(pHead );            printf("游戏到此结束,想玩再开一把呗…………\n");            break;        }        else            break;    }return 0;}

0 0
原创粉丝点击