加载中…
个人资料
aqiusen
aqiusen
  • 博客等级:
  • 博客积分:0
  • 博客访问:17,656
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

一个链表创建的几种写法

(2013-06-27 15:20:12)
没有定义head为全局变量的写法:
#include<stdio.h>
#include<stdlib.h>
#define TYPE int
typedef struct _List{
    TYPE value;
    struct _List * next;
}List;

List * Insert_List(List* head,const TYPE value){
    int ListSize= sizeof(List);
    List * newNode = malloc(ListSize);
    newNode->value = value;
    if(head == NULL){
        head = newNode;
        head->next=NULL;
        return ;
    }
    newNode->next=head;
    head=newNode;
    return head;
}

void Tarvel_List(List * head){
    List * p = head;
    if(head == NULL){
       printf("the list is empty\n");
       return ;
    }
    while(p!=NULL){
       printf("the value is %d \n",p->value);
       p = p->next;
    }
}

int main(){
List * head =NULL;
    head=Insert_List(head,1);
    head=Insert_List(head,2);
    head=Insert_List(head,3);
    head=Insert_List(head,4);
    head=Insert_List(head,5);
    head=Insert_List(head,6);
    Tarvel_List(head);
  return 0;
}

————————————————————————————————————————————
定义头指针为全局变量:
#include<stdio.h>
#include<stdlib.h>
#define TYPE int
typedef struct _List{
    TYPE value;
    struct _List * next;
}List;
List * head =NULL;
void Insert_List(const TYPE value){
    int ListSize= sizeof(List);
    List * newNode = malloc(ListSize);
    newNode->value = value;
    newNode->next=NULL;
    if(head == NULL){
        head = newNode;
        return ;
    }
    newNode->next=head;
    head=newNode;
}

void Tarvel_List(){
    List * p = head;
    if(head == NULL){
       printf("the list is empty\n");
       return ;
    }
    while(p!=NULL){
       printf("the value is %d \n",p->value);
       p = p->next;
    }
}

int main(){
    Insert_List(1);
    Insert_List(2);
    Insert_List(3);
    Insert_List(4);
    Insert_List(5);
    Tarvel_List();
  return 0;
}
//——————————————————————————————————————————
二重指针的改进的写法:
#include<stdio.h>
#include<stdlib.h>
#define TYPE int
typedef struct _List{
    TYPE value;
    struct _List * next;
}List;

void Insert_List(List** head,const TYPE value){
    int ListSize= sizeof(List);
    List * newNode = malloc(ListSize);
    newNode->value = value;
    if(*head == NULL){
        *head = newNode;
        (*head)->next=NULL;
        return ;
    }
    newNode->next=*head;
    *head=newNode;
}

void Tarvel_List(List **head){
    List * p = *head;
    if(head == NULL){
       printf("the list is empty\n");
       return ;
    }
    while(p!=NULL){
       printf("the value is %d \n",p->value);
       p = p->next;
    }
}

int main(){
//  List **head=NULL;//我们在这里定义二重指针,然后传 Insert_List(head,1);进去,当执行到*head的时候我们的*head去解引用,由于*head没有内存,因此会出现段错误,因此我们下面为其分配内存空间。
// List **head=malloc(sizeof(List));//head 指向的地址为1000  *head表示我们取地址为1000的内容比如是5 ,取出来之后我们放在我们malloc的空间里面,这样操作没有问题
  List *head = NULL;//head指向1000 然后 &head传进去之后解引用,为*(&head) 因此取的值为1000 而不是1000指向的地址,因此我们就不许要malloc一个空间去接收了,直接用head接收就行了,因为它本身就是用来装地址的
    Insert_List(&head,1);
    Insert_List(&head,2);
    Insert_List(&head,3);
    Insert_List(&head,4);
    Insert_List(&head,5);
    Tarvel_List(&head);
  return 0;
}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有