• 创建单链表(头插法、尾插法)


    1、头插法创建单链表(生成的链表中结点的顺序与输入的顺序相反)

    //头插法创建单链表
    Status CreateList_L(LinkList &L,int n){//前提L已经初始化完成 
        LinkList p;
        int a;
        for(int i=0;i<n;i++){
            p = (LinkList)malloc(sizeof(Node));
            scanf("%d",&a);
            p->data = a;
            p->next = L->next;//p指向下一个 
            L->next = p;//再将p给单链表L的表头 
        }
        return OK; 
    } 

    2、尾插法创建单链表(与输入的顺序相同)

    //尾插法创建单链表
    Status CreateList_Tail(LinkList &L, int n){
        LinkList p,r;
        r = L;
        int a;
        for(int i=0;i<n;i++){
            p = (LinkList)mallco(sizeof(Node));
            scanf("%d",&a);
            p->data = a;
            r->next = p;
            r = p; 
        }
       r->next = NULL;
    return OK; }

     3、综合实现

     1 #include<stdio.h>
     2 #include<malloc.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #define OVERFLOW -2
     6 typedef struct Node{
     7     int data;
     8     struct Node *next;
     9 }Node,*LinkList;
    10 
    11 int ListInit_L(LinkList &L){
    12     L = (LinkList)malloc(sizeof(Node));
    13     if(!L)
    14         exit(OVERFLOW);
    15     L->next = NULL;
    16     return 1;
    17 }
    18 
    19 
    20 void CreatList_head(LinkList &L, int n){
    21     LinkList p;
    22     int a;
    23     for(int i = 0; i < n; i++){
    24         p = (LinkList)malloc(sizeof(Node));
    25         scanf("%d",&a);
    26         p->data = a;
    27         p->next = L->next;
    28         L->next = p;
    29     }
    30 }
    31 
    32 void CreatList_tail(LinkList &L, int n){
    33     LinkList p,r;
    34     r = L;
    35     int a;
    36     for(int i = 0; i < n; i++){
    37         p = (LinkList)malloc(sizeof(Node));
    38         scanf("%d",&a);
    39         p->data = a;
    40         r->next = p;
    41         r = p;
    42     }
    43     r->next = NULL;
    44 }
    45 
    46 void printList(LinkList &L){//输出单链表 
    47     LinkList q;
    48     q = L->next;
    49     while(q){ 
    50         printf("%d ",q->data);
    51         q = q->next;
    52     }  
    53 }
    54 
    55 int main(){
    56     LinkList L;
    57     ListInit_L(L);
    58     printf("请选择:
    
    1、头插法创建单链表
    2、尾插法创建单链表
    
    请你选择创建方式:");
    59     int x;
    60     scanf("%d",&x);
    61     if(x==1){
    62         printf("头插法创建单链表:
    
    请你输入创建数据元素的个数:");
    63         int n;
    64         scanf("%d",&n); 
    65         CreatList_head(L,n);//头插法创建单链表
    66         printList(L);//输出 
    67     } 
    68     if(x==2){
    69         printf("尾插法创建单链表:
    
    请你输入创建数据元素的个数:");
    70         int n;
    71         scanf("%d",&n); 
    72         CreatList_tail(L,n);//头插法创建单链表
    73         printList(L);//输出 
    74     }
    75     return 0; 
    76 }

  • 相关阅读:
    曾经拥有,今生无悔
    WinRAR 4.20 beta2 key!注册文件 注册码
    加谁的QQ,并聊天‘
    自己读c
    字符串和字符数组做函数参数是的区别,
    数组
    *p和++对p的影响和对*p的影响
    字符串赋给指针
    memset函数,还没看2013.12.19
    strtock函数小结。
  • 原文地址:https://www.cnblogs.com/geziyu/p/9892659.html
Copyright © 2020-2023  润新知