线性表的链式存储结构从建表插入到 删除销毁

文件1    list.c

#include<stdio.h>
#include"list.h"
#include<stdlib.h>
#include<string.h>
/*
	函数名 creatList;
	功能 创建链表 申请空间
	返回值 无
	定义一个指针函数返回的就是个函数
*/
LIST *creatList(void)
{
	LIST * pList = NULL;
	pList = (LIST *)malloc(sizeof(LIST)); 
	

	//清空 并且初始化
	if(NULL == pList){
		memset(pList,0,sizeof(LIST));
	}	
	//指针函数 所以要返回pList
	return pList;
}
/*
	函数名称:destoryList
	函数功能 : 销毁线性表
	参数:LIST *pList 指向线性表首地址的指针
	函数返回值:无

*/
void destoryList(LIST *pList)
{
	LIST * pDel = NULL;
	if(NULL == pList)
	{
		return ;
	}
	while(1)
	{	

		//找到被删除的结点
		pDel = pList->pNext;
		if(NULL == pDel)
		{
			break;
		}
		//保护后面的结点
		pList->pNext = pDel->pNext;
		free(pDel);
	}
	free(pList);
	pList = NULL;
	
}

/*
	函数名:insertList
	功能  给线性表插入数据(前插法)(尾插法)(中间插入)
	参数:LIST *pList 指向首地址的指针;
		int offset 要插入的位置;
		data_type item 要插入的元素
	函数返回值 成功时候,返回0;失败的时候返回-1;

*/
int insertList(LIST *pList,int offset,data_type item)
{	
	LIST *pTmp = NULL; //尾结点要插入的位置
	LIST *pNew = NULL; //头结点要插入的数据
	 //1.判断是否可以插入
	if(NULL == pList)
	{
		return ERR;
	}
	//2.新建结点 并且赋值
	pNew = (LIST *)malloc(sizeof(LIST));	
	if(NULL == pNew)
	{
		return ERR;
	}
	pNew->data = item;
	pNew->pNext = NULL;	
	

	//从头结点插入
	if(HEAD == offset)
	{	
	//找到要插入的位置--pList
		//3.保护后面的结点
		pNew->pNext = pList->pNext;
		//4.链接新的结点
		pList->pNext = pNew;
	}
	//从尾结点插入  准确的说叫接入
	
	
	if(TAIL == offset)
	{
		//找到要插入的结点
		pTmp = pList;
		//3. 保护后面的结点
		while(NULL != pTmp->pNext)
		{
			//向后移动尾结点
			pTmp = pTmp->pNext;
		}
		//4. 接入新的结点
		pTmp->pNext = pNew;
	}
	return OK;
}
/*	函数名称 :showList
	函数功能: 打印线性表
	函数参数:LIST*pList
	*/
void showList(LIST *pList)
{
	LIST *pstr = pList;
	if(NULL == pList)
	{
		return ;
	}
	while(1){
		if(NULL != pstr->pNext)
		{
			printf("%d",pstr->data);
		
			pstr = pstr->pNext;
		}else{
			break;
			}
	}
	printf("\n\t");

}

文件2     list.h

#ifndef _LIST_H_
#define _LIST_H_

typedef int data_type;


typedef struct list
{
	data_type data;
	struct list *pNext;
}LIST;

enum result{

	ERR = -1,
	OK,

	FLASE =0,
	TRUE,
};
enum offset
{
	TAIL=-1,
	HEAD,
};
//声明一个指针函数返回的就是creatList
LIST *creatList(void);
//声明一个函数 销毁线性表;

void destoryList(LIST *pList);
// 声明一个插入数据给线性表的函数
int insertList(LIST *pList,int offset,data_type item);
void showList(LIST*pList);

#endif

文件3     test.c

#include<stdio.h>

#include"list.h"

int main(void)

{

         LIST*pList;

         data_type data;

        

         pList = creatList();  

         if(NULL == pList)

         {

                  return ERR;

         }

         insertList(pList,0,52);

        

         insertList(pList,0,32);

         insertList(pList,0,22);

         insertList(pList,0,12);

         showList(pList);

         return 0;

}

运行结果如下



猜你喜欢

转载自blog.csdn.net/nbdr_yl/article/details/80575983
今日推荐