day22

主函数

#include "main.h"
int main(int argc, const char *argv[])
{
    LinkListPtr L=list_create();
    if(NULL==L)
    {
        return -1;
    }
    list_insert_head(L,1);
    list_insert_head(L,2);
    list_insert_head(L,3);
    list_show(L);
    list_delete_head(L);
    list_show(L);
    list_free(L);
    return 0;
}


函数封装

#include "main.h"
//创建链表
LinkListPtr list_create()
{
    //在堆区申请一个头结点类型
    LinkListPtr L = (LinkListPtr)malloc(sizeof(Node));
    if(NULL == L)
    {
        printf("创建失败\n");
        return NULL;
    }
    //创建成功,对节点进行初始化
    L->top = -1;       //初始链表长度为0
    L->next = NULL;     //链表上没有任何结点

    printf("创建成功\n");
    return L;
}
//判空操作
int list_empty(LinkListPtr L)
{
    //判断逻辑
    if(NULL == L)
    {
        printf("所给链表不合法\n");
        return -1;
    }
    //判断指针域的内容
    return L->next == NULL && L->top==0;
}
/*申请结点封装数据函数
LinkListPtr node_buy(datatype e)
{
    //在堆区申请结点
    LinkListPtr p = (LinkListPtr)malloc(sizeof(Node));
    if(NULL == p)
    {
        printf("结点申请失败\n");
        return NULL;
    }
    //结点申请成功,将数据封装进去
    p->data = e;
    p->next = NULL;
    return p;
}*/
//头插
int list_insert_head(LinkListPtr L, datatype e)
{
    if(NULL==L)
    {
        printf("头插失败\n");
        return 0;
    }
    L->top++;
    L->data[L->top]=e;
    printf("入栈成功\n");
}
//遍历
void list_show(LinkListPtr L)
{
    //判断逻辑
    if(NULL==L || list_empty(L))
    {
        printf("遍历失败\n");
        return ;
    }
      //开始遍历
    printf("从栈顶到栈底元素分别是:");
    for(int i=L->top; i>=0; i--)
    {
        printf("%d\t", L->data[i]);
    }
    printf("\n");
}
//头删
int list_delete_head(LinkListPtr L)
{
    if(NULL==L||list_empty(L))
    {
        printf("删除失败\n");
        return 0;
    }
    datatype e=L->data[L->top];
    printf("%d\n",e);
    L->top--;
    printf("删除成功\n");
    return 1;
}
//链表的销毁
void list_free(LinkListPtr L)
{
    while(!list_empty(L))
    {
        list_delete_head(L);
    }
    free(L);
    L=NULL;
    printf("销毁成功\n");
}


头文件

#ifndef _MAIN_H_
#define _MAIN_H_
#include
#include
#include
#define MAX 6
typedef char datatype;    //类型重命名

//定义节点类型
typedef struct Node
{
        datatype data[MAX];      //数据域
        int top;             //头结点数据域
	    struct Node *next;      //指针域
}Node, *LinkListPtr;

//创建链表
LinkListPtr list_create();
//判空操作
int list_empty(LinkListPtr L);
//申请结点封装数据函数
LinkListPtr node_buy(datatype e);
//头插
int list_insert_head(LinkListPtr L, datatype e);
//遍历
void list_show(LinkListPtr L);
//头删
int list_delete_head(LinkListPtr L);
//链表的销毁
void list_free(LinkListPtr L);
#endif

day22_第1张图片

 

你可能感兴趣的:(数据结构)