【郝斌数据结构自学笔记】26_通过链表排序算法的演示再次详细讨论到底什么是算法以及到底什么是泛型【重点】

26_通过链表排序算法的演示再次详细讨论到底什么是算法以及到底什么是泛型【重点】


算法:

狭义的算法是与数据的存储方式密切相关

广义的算法是与数据的存储方式无关

泛型:

                   利用某种技术达到的效果就是:不同的存储方式,执行的操作是一样的

#include<stdio.h>

#include<malloc.h>

#include<stdlib.h>

 

typedefstruct Node

{

         int data;//数据域

         struct Node * pNext;//指针域

}NODE,*PNODE;//NODE等价于structNode,PNODE等价于struct Node *

//函数声明

PNODEcreate_list(void);

voidtraverse_list(PNODE pHead);

boolis_empty(PNODE pHead);

intlength_list(PNODE);

boolinsert_list(PNODE,int,int);

booldelete_list(PNODE,int,int*);

voidsort_list(PNODE);

 

 

intmain(void)

{

         PNODE pHead=NULL;//等价于structNode *pHead=NULL;

         pHead=create_list();//creat_list()功能:创建一个非循环单链表,并将该链表的头节点的地址付给pHead

         traverse_list(pHead);

         int len=length_list(pHead);

         printf("链表长度是%d\n",len);

 

         if(is_empty(pHead))

                   printf("链表为空!\n");

         else

                   printf("链表不空!\n");

         sort_list(pHead);

         traverse_list(pHead);

 

 

         return 0;

}

 

PNODEcreate_list(void)

{

         int len;//用来存放有效节点的个数

         int i;

         int val;//用来临时存放用户输入的节点的值

 

         //分配了一个不存放有效数据的头节点

         PNODEpHead=(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);

 

                   PNODEpNew=(PNODE)malloc(sizeof(NODE));

                   if(NULL==pNew)

                   {

                            printf("分配失败,程序终止!\n");

                            exit(-1);

                   }

                   pNew->data=val;//挂

                   pTail->pNext=pNew;

                   pNew->pNext=NULL;

                   pTail=pNew;

        

         }

         return pHead;

}

 

voidtraverse_list(PNODE pHead)

{

         PNODE p=pHead->pNext;

         while(NULL!=p)

         {

                   printf("%d",p->data);     

                   p=p->pNext;//不连续,不能用p++

         }

         printf("\n");

         return;

}

 

boolis_empty(PNODE pHead)

{

         if(pHead->pNext==NULL)

                   return true;

         else

                   return false;

}

 

intlength_list(PNODE pHead)

{

         PNODE p=pHead->pNext;

         int len=0;

         while(NULL!=p)

         {

                   len++;

                   p=p->pNext;

         }

         return len;

}

 

voidsort_list(PNODE pHead)

{

         int i,j,t;

         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]

                            {

                                     t=p->data;//类似于数组中的:     t=a[i];

                                     p->data=q->data;//类似于数组中的: a[i]=a[j];

                                     q->data=t;//类似于数组中的:     a[j]=t;

                            }

                   }

         }

 

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值