前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链表排序算法、再次详细讨论到底什么是算法以及到底什么是泛型【重点】

链表排序算法、再次详细讨论到底什么是算法以及到底什么是泛型【重点】

作者头像
孙晨c
发布2019-09-10 19:16:33
2990
发布2019-09-10 19:16:33
举报
文章被收录于专栏:无题~无题~
代码语言:javascript
复制
  1 #include<stdio.h>
  2 #include<malloc.h>
  3 #include<stdlib.h>
  4 
  5 //函数声明
  6 PNODE create_list();//返回值是链表头结点的地址
  7 void traverse_list(PNODE pHead);
  8 bool is_empty(PNODE pHead);
  9 int length_list(PNODE pHead);
 10 bool insert_list(PNODE,int,int);
 11 bool delete_list(PNODE,int,int *);
 12 void sort_list(PNODE pHead);
 13 
 14 
 15 typedef struct Node{
 16     int data;//数据域
 17     struct Node * pNext;//指针域    
 18 }NODE,*PNODE;//NODE等价于struct Node  PNODE等价于struct Node*
 19 
 20 int main(){
 21     PNODE pHead = NULL;//等价于struct Node * pHead = NULL;
 22     
 23     pHead = create_list();//创建一个非循环单链表,并将该链表的头结点的地址赋值给pHead
 24     traverse_list(pHead);//遍历 
 25     sort_list(pHead);//排序
 26     if(is_empty(pHead)){
 27         printf("链表为空");
 28     }
 29     else{
 30         printf("链表不空");
 31     }
 32      
 33      int len = length_list(pHead);
 34      printf("链表长度是%d",len);
 35      
 36      
 37      
 38     return 0;
 39 }
 40 
 41 PNODE create_list(){
 42     int len;//有效节点的个数
 43     int i;
 44     int val;//临时存放用户输入的结点的值
 45     
 46     //分配一个不存放有效数据的头结点
 47     PNODE pHead = (PNODE)malloc(sizeof(NODE));
 48     if(pHead==NULL){
 49         printf("分配失败,程序终止");
 50         exit(-1);
 51     }
 52     
 53      PNODE pTail = pHead;
 54      pTail->PNext = NULL;//若只有一个结点,此时就为尾节点,指针域应当为空
 55     printf("链表节点个数:");
 56     scanf("%d",&len);
 57     
 58     for(i=0;i<len;i++){
 59         printf("请输入第%d个节点的值:",i+1);
 60         scanf("%d",&val);
 61         
 62         PNODE pNew = (PNODE)malloc(sizeof(NODE));//生成新结点
 63              if(pNew==NULL){
 64             printf("分配失败,程序终止");
 65             exit(-1);
 66         }
 67         pNew->data = val;//把数据存放进数据域
 68         pTail->pNext = pNew;//把新结点地址赋值给尾节点指针域
 69         pNew->pNext = NULL;//把新结点指针域赋值为空
 70         pTail = pNew;//最后一步把新结点地址复制给尾节点(就是让新结点成为尾节点)
 71        // pHead->pNext = pNew;
 72        // pNew->pNext=NULL;//最后一个结点的指针域为空
 73     }
 74     return pHead;
 75 }
 76 
 77 void traverse_list(PNODE pHead){
 78     PNODE p = pHead->pNext;//若链表为空,则头结点指针域就为空,则p就为空
 79     
 80     while(p!=NULL){
 81         printf("%d ",p->data);
 82         p=p->pNext;
 83     }
 84     printf("\n");
 85     return;
 86 }
 87 
 88 bool is_empty(PNODE pHead){
 89     if(pHead->pNext==NULL){//如果头结点的指针域为空,则链表为空
 90         return true;
 91     }
 92     else{
 93         return false;
 94     }
 95 }
 96 
 97 int length_list(PNODE pHead){
 98      PNODE p = pHead->pNext;
 99      int len = 0;
100      while(p!=NULL){
101          len++;
102          p=p->pNext;
103      }
104 }
105 
106 void sort_list(PNODE pHead){
107     int  i ,j , t;
108     int len = length_list(pHead);
109     PNODE p,q;
110     //重点!!!
111     for(i=0,p=pHead->pNext; i<len-1; i++,p=p->pNext){
112         for(j=j+1,q=p->pNext;j<len;j++,q=q->pNext){
113             if(p->data > q->data){ //类似于数组的:a[i]>a[j]
114                 t = p->data;          //t=a[i];
115                 p->data = q->data;    //a[i]=a[j];
116                 q->data = t;          //a[j]=t;  
117             }
118         }
119     }
120 
121 }

算法:

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

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

泛型:

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 算法:
  • 泛型:
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档