博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构链表示例
阅读量:4646 次
发布时间:2019-06-09

本文共 2620 字,大约阅读时间需要 8 分钟。

#include<iostream>

#include<stdlib.h>
using namespace std;
int n;
typedef int ElemType;
typedef struct LNode{
        ElemType elem;
        LNode *next;
        }LNode,*LinkList;
        
int InitList(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)
       exit(0);
    L->next=NULL;
    return 1;
}
     int CreateAscend(LinkList &L,int n){
         int i=1;
         if(n<=0) 
             return 0;
         InitList(L);
         printf("请输入%d个元素\n",n);
         LinkList s,p,q;
         s=(LinkList)malloc(sizeof(LNode));
         scanf("%d",&s->elem);
         L->next=s;
         s->next=NULL;         
         while(i<n){
                    s=(LinkList)malloc(sizeof(LNode));
                    p=L->next;
                    q=L;
                    scanf("%d",&s->elem);
                    while(p&&(p->elem<=s->elem)){
                                                 q=p;
                                                 p=p->next;
                            
                            } 
                           s->next=p;
                           q->next=s;
/**************
修改**************/                         
if(!p){
q->next=s;
s->next=NULL;}
/**************/  
//s->next=q->next;
//q->next=s;
i++;
}
}

void ScanList(LinkList &L){
     LinkList p;
     p=L->next;
     printf("请输入链表%d个元素数升序输出\n",n);
     while(p){
      
              printf("%-5d",p->elem);
            p=p->next;
              }
     }
     
     
int main(){
 
       
LinkList L;
printf("请输入链表的元素数\n");
scanf("%d",&n);
CreateAscend(L,n);
ScanList(L);
system("pause");
return 0;
       }
/*
int CreateAscend(LinkList &L,int n)
InitList(LinkList &L)
ScanList(LinkList &L)
这三个LinkList &L都要加 &不然为造成指针丢失,例如: 
LinkList L中的  L为指向 struct LNode{
        ElemType elem;
        LNode *next;
        }
的指针,你在调用 CreateAscend(L,n);时由于把 int main()的中LinkList L给了 CreateAscend(L,n)的 L当不加&时由于是指针给了指针所以相当时
调用函数中的l中的形参l指向实参l 是实参的地地(指针在末初始化之前时指向内存中的垃圾单元是不可用用的)暂时说能用接着说: 
所以你的这个函数形参指向的也是不可能的  当你为 int InitList(LinkList &L){
    L=(LinkList)malloc(sizeof(LNode));
    if(!L)
       exit(0);
    L->next=NULL;
    return 1;
}时是把 L指向了在堆中分配的 (LinkList)malloc(sizeof(LNode))所以此时不指向实参叫做丢失了,假如你想用有一个方法就是用二级指针   
*/
/*
二级指针  :
#include<iostream>
#include<stdlib.h>
using namespace std;
int n;
typedef int ElemType;
typedef struct LNode{
        ElemType elem;
        LNode *next;
        }LNode,*LinkList;
        
int InitList(LinkList *L){
    *L=(LinkList)malloc(sizeof(LNode));
    if(!*L)
       exit(0);
    (*L)->next=NULL;
    return 1;
}
     int CreateAscend(LinkList *L,int n){
         int i=1;
         if(n<=0) 
             return 0;
         InitList(L);
         printf("请输入%d个元素\n",n);
         LinkList s,p,q;
         s=(LinkList)malloc(sizeof(LNode));
         scanf("%d",&s->elem);
         (*L)->next=s;
         s->next=NULL;         
         while(i<n){
                    s=(LinkList)malloc(sizeof(LNode));
                    p=(*L)->next;
                    q=(*L);
                    scanf("%d",&s->elem);
                    while(p&&(p->elem<=s->elem)){
                                                 q=p;
                                                 p=p->next;
                            
                            } 
                           s->next=p;
                           q->next=s;
/**************
修改**************                         
if(!p){
q->next=s;
s->next=NULL;}
/*************  
//s->next=q->next;
//q->next=s;
i++;
}
}

void ScanList(LinkList *L){
     LinkList p;
     p=(*L)->next;
     printf("请输入链表%d个元素数升序输出\n",n);
     while(p){
      
              printf("%-5d",p->elem);
            p=p->next;
              }
     }
     
     
int main(){
 
       
LinkList L;
printf("请输入链表的元素数\n");
scanf("%d",&n);
CreateAscend(&L,n);
ScanList(&L);
system("pause");
return 0;
       }*/

转载于:https://www.cnblogs.com/zhangjunjie/p/3368288.html

你可能感兴趣的文章
整型与字节转换关系
查看>>
用户名判断(练习)
查看>>
VS2013+EF6.1+Mysql配置心路历程
查看>>
Windows IIS服务挂载NAS共享文件存储
查看>>
用户列表-投资记录sql
查看>>
Mac上搭建rtmp流媒体服务器(结合FFmpeg的使用)
查看>>
HTML5⑥
查看>>
将jar包安装到本地仓库
查看>>
2333
查看>>
T4:益智游戏
查看>>
JS概述
查看>>
codeforces 712B Memory and Trident
查看>>
并行编译Parallel Building
查看>>
淘宝处理高并发
查看>>
14、equals 与 == 的区别
查看>>
处理爬虫遇到的乱码问题
查看>>
python---help
查看>>
爱你现在的时光 ---白岩松
查看>>
大话RabbitMQ 基础入门
查看>>
非法字符:"\ufeff"
查看>>