zoukankan      html  css  js  c++  java
  • 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(9)链表

    我们至少可以通过两种结构来存储数据

    数组

    1.需要一整块连续的存储空间,内存中可能没有

    2.插入元素,删除元素效率极低。

    3.查找数据快

    链表

    1.查找效率低

    2.不需要一块连续的内存空间

    3.插入删除元素效率高

    计算机术语

    头指针:存放头结点地址的指针变量

    头结点:

    数据类型和首节点的数据类型一模一样

    头结点是首节点前面的那个节点

    头结点并不存放有效数据

    设置头结点的目的是为了方便对链表操作

    首节点:存放第一个有效数据的节点

    尾节点:

    存放最后一个有效数据的节点

    尾节点的指针域是空的(null)

    头指针---->头结点---->(首节点----->链表------>尾节点)  ()内是有效数据

    只需要知道头指针就能确定一个链表(尾节点指针域是null)

    2012年2月6日7:30:48
    
    # include <stdio.h>
    # include <malloc.h>
    # include <stdlib.h>
    
    struct Node{
    	int data;
    	struct Node * pNext;
    };
    
    struct Node * create_list();
    void traverseList(struct Node *);
    
    int main(void){
    	struct Node * pHead = NULL;  //定义头指针
    	pHead = create_list();  //构造链表,返回头结点地址
    	traverseList(pHead);  //输出链表
    
    	return 0;
    }
    
    struct Node * create_list(void){
    	int len;
    	int i;
    	int val;
    
    	//创建一个头结点
    	struct Node * pHead = (struct Node *)malloc(sizeof(struct Node)); 
    	if(NULL == pHead){
    		printf("分配失败,程序终止!
    ");
    		exit(-1);
    	}
    	struct Node * pTail = pHead;  //将头结点的地址给指针变量pTail使pTail指向头结点
    	pTail->pNext = NULL;  //头结点的结构体元素(下一个节点地址)赋值
    	printf("请输入你要创建链表的节点个数:len = ");
    	scanf("%d", &len);
    
    	for(i=0; i<len; i++){
    		printf("请输入第%d个节点的值:", i+1);
    		scanf("%d", &val);
    
    		//给第 i+1 个节点分配内存空间
    		struct Node * pNew = (struct Node *)malloc(sizeof(struct Node));
    		if(NULL == pNew){
    			printf("分配失败,程序终止!
    ");
    			exit(-1);
    		}
    		//内存分配成功后
    		pNew->data = val;      //新节点赋值
    		pTail->pNext = pNew;   //pNew指向的地址给头结点的变量
    		pNew->pNext = NULL;    //新节点地址变量给空值
    		pTail = pNew;         //重新使pTai 替换 pNew进行下一次分配创建
    	}
    	return pHead;
    }
    
    void traverseList(struct Node * pHead){
    	struct Node * p = pHead->pNext;
    	while(NULL != p){
    		printf("%d
    ", p->data);
    		p = p->pNext;
    	}
    	return;
    }


  • 相关阅读:
    SharePoint中获取当前登录的用户名
    SharePoint 2013 图文开发系列之InfoPath入门
    在InfoPath中如何获取当前用户的信息(Profile)
    更新当前列并添加其他列
    poj3067 Japan
    poj2481 Cows
    poj1195 Mobile phones
    poj2299 Ultra-QuickSort
    lower_bound()和upper_bound
    hdu4339 Query
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6469050.html
Copyright © 2011-2022 走看看