首页 > 代码库 > 线性表链式存储的实现详解

线性表链式存储的实现详解

本文原创,转载请注明:http://blog.csdn.net/j903829182/article/details/38173681



#include<stdio.h>
#include<malloc.h>
//线性表的链式存储和实现,带头点
#define true 1
#define false 0
typedef int DataType;//定义抽象数据类型
//节点的结构体
typedef struct Node{
    DataType data;//节点的数据域
    struct Node *next;//节点的指针域
}SLNode;

//初始化
//这里参数使用了指针的指针,是为了使主函数里的头指针指向这个函数开辟的空间节点
//如果不使用指针的指针,指向头指针,那么c语言的函数都是进行值传递的,这里的参数保存的是
//主函数里面头指针的值得副本,为参数赋值后,不能改变头指针指向的值
//使用指针的指针保存的是头指针的地址,那么对这个地来址里面值的改变,就是对头指针里面值得改变
//所以这里需要使用指针的指针,来进行对实参值的改变
void ListInitiate(SLNode **head){
     *head=(SLNode*)malloc(sizeof(SLNode));//申请头节点,使头指针指向头节点
	 (*head)->next=NULL;//设置结束标志为NULL
}

//求当前元素个数
int ListLength(SLNode *head){
    int num=0;//初始变量num用来计数
	SLNode *p=head;//p指向头节点
	while(p->next!=NULL){//循环计数
	      p=p->next;//p指向p的下一个节点
		  num++;//累加
	}
	return num;//返回计数的值
}

//插入节点,我这里把头节点设置为0位置,插入数据元素时,应该从1开始
int ListInsert(SLNode *head,int i,DataType data){
    int j=0;//计数变量初始化为0
    SLNode *p=head,*q;//p指向头节点
	//为了在i位置插入数据,应该找到i-1位置的节点,为了便于计数,我把节点从1开始计数节点的
	while(p->next!=NULL&&j<i-1){//最终让p指向第i-1个节点
	      p=p->next;//p指向下一个节点
		  j++;//变量累加计数
	}
	if(j!=i-1){
	   printf("插入位置出错!!!\n");//输出提示信息
	   return false;//返回操作结果
	}

    q=(SLNode *)malloc(sizeof(SLNode));//生成新节点
	q->data=http://www.mamicode.com/data;//把数据给新开辟的节点>