码迷,mamicode.com
首页 > 编程语言 > 详细

指针与数据结构算法_链表(C语言)

时间:2016-04-23 01:34:01      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

一.变量:

   声明一个变量系统是没有给这个变量分配内存空间的:

例:

int j;//编译的时候是没有分配内存空间的
int i=3;//计算机在编译的时候就会给这个i分配4个字节的内存空间

二.malloc动态分配内存地址:

回想一下:我们在程序中存储一个整数10;除了使用int a;在内存中申请一块区域来存储,还有一种方法:
              malloc(4);                    //从内存中申请4个字节大小的内存存放整数10
  在C中经常看到这样的写法:
        (int *)malloc(sizeof(int));  //sizeof(获取int类型所占的字节数)
                                                //(int *)表示申请的这些字节数用于存放int类型的整数
例:
#include <stdio.h>
#include <stdlib.h>
 int main()
 {
     int b;
     b=(int)malloc(sizeof(int));  //没有这句话,变量b 是不占内存的,printf输出就会空指针异常;有这句话,就输出的申               请的内存地址
     printf("%d",b);
     system("pause");
     return 0;
 }

三.C中的*和&:

       *:代表取内存中的值(*还有乘法运算,这个就不多解释了)
       &: 代表获取的是变量的地址
       **:二级指针(就是地址里面存放第三个变量的地址地址)
       ->:结构体指针运算符(用于访问结构体内部成员的)
 
例(二级指针的例子):
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a[]={1,2,3,4,5};//这个数组里存入的是具体的数据
    int *num[]={&a[0],&a[1],&a[2],&a[3],&a[4]};//这个数组里面就是全部存的数内存地址,并不是数据
    int **p,i;
    p=num;
    for (i = 0; i < 5; i++)//注意这里,C语言是不能在这里进行变量的定义的如:int i
    {
        printf("%d\t",**p);//这里的p表示num数组的首地址,*p表示num[1]的值,也就是a[0]的地址,**p就是值了
        p++;//指针向下移一格
    }
    system("parse");
    return 0;
}

 

四.链表(遍历):
根据以上知识点,就可以进行简单的链表的遍历了
例:
#include <stdio.h>
#include <stdlib.h>
 struct note
 {
     int data;
     struct note *next;
 };
int main()
 {
     struct note *head,*p,*q,*t;//
     int i,n,a;
     scanf("%d",&n);//有多少个数
     head=NULL;//头指针初始化为空
     for (i = 0; i < n; i++)//循环读取n个数
     {
         scanf("%d",&a);
         p=(struct note *)malloc(sizeof(struct note));//动态申请一个节点的空间,存放节点
         p->data=a;//将数据存入data中
         p->next=NULL;//设置当前指针的后续指针指向空
         if(head==NULL)
         {
             head=p;//如果这是第一个创建的节点,就让头指针指向这个
         }
         else
         {
             q->next=p;//如果不是第一个节点,就让前一个的后续指针指向当前节点
         }
         q=p;//在将q也指向当前节点
     }
     t=head;
     while (t!=NULL)
     {
         printf("%d\t",*t);
         t=t->next;   //继续下一个节点
     }
     system("pause");
return 0; }

 

五.后记:
 
         以上只是对链表进行了遍历,链表数据的添加删除,后续继续更新
 

指针与数据结构算法_链表(C语言)

标签:

原文地址:http://www.cnblogs.com/fengxuehuanlin/p/5423386.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!