【C++ 用结构体封装链表】

C++ 用结构体封装链表

结构体的语法形式

struct 结构体名{
	//成员变量
	//成员函数
};

示例

typedef struct test
{
	void setval(int a) //成员函数
	{
		val = a;
	}
	int getval()
	{
		return val;
	}
	int val; //成员变量
}st_t;

int main()
{
	st_t stru;
	stru.val = 88;
	stru.setval(66); //结构体变量访问成员函数
	cout << stru.getval() << endl; 
	return 0;
}

在C++里用结构体封装链表

::是作用域访问符,是起限定作用的

完整示例代码

#include <iostream>
#include <stdio.h>
using namespace std;

typedef int link_data_t;
typedef struct Linklist{
    link_data_t data; //数据域
    struct Linklist *next; //指针域
}Link_node,*Link_pnode;


typedef struct Linklist_hanshu
{
    Link_pnode create_link();
    int empty_link(Link_pnode L); //判空
    int getlen_link(Link_pnode L); //求长度
    int select_link(Link_pnode L,int pos); //按位置查找
    int print_link(Link_pnode L); //遍历链表并打印
    int insert_link(Link_pnode L,int pos,link_data_t data); //按位置插入
    int delete_link(Link_pnode L,int pos); //按位置删除
}Link_math; 

Link_pnode Link_math::create_link()
{
    Link_pnode L = (Link_pnode)malloc(sizeof(Link_node));
    if(L == NULL)
    {
        cout << "create fail" << endl;
        return NULL;
    }
    L->next = NULL;
    return L;
}

int Link_math::empty_link(Link_pnode L)
{
    if(L == NULL)
    {
        cout << "L is NULL" << endl;
        return -1;
    }
    else if(L->next == NULL)
        return 0;
    else
        return 1;
}

int Link_math::getlen_link(Link_pnode L)
{
    int len = 0;
    if(-1 == (empty_link(L)))
    {
        cout << "L is NULL" << endl;
        return -1;
    }
    else if(0 == (empty_link(L)))
    {
        return 0;
    }
    else
    {
        while(L->next)
        {
            L = L->next;
            len++;
        }
        return len;
    }
}

int Link_math::select_link(Link_pnode L,int pos)
{
    if(-1 == (empty_link(L)))
    {
        cout << "L is NULL" << endl;
        return -1;
    }
    else if(pos < 0 ||pos > getlen_link(L))
    {
        cout << "wrong position" << endl;
        return -1;
    }
    else
    {
        for(int i = pos;i > 0;i--)
        {
            L = L->next;
        }
        return L->data;
    }
}

int Link_math::print_link(Link_pnode L)
{
    if(1 != empty_link(L))
    {
        cout << "no data" << endl;
        return -1;
    }
    else
    {
        L = L->next;
        while(L)
        {
            printf("data=%d-> ",L->data);
            L = L->next;
        }
        cout << '\n' << endl;
    }
    return 0;
}

int Link_math::insert_link(Link_pnode L,int pos,link_data_t data)
{
    if(-1 == empty_link(L))
        return -1;
    Link_pnode p = create_link();
    p->data = data;
    p->next = NULL;
    int i;
    for(i = pos-1;i > 0;i--)
    {
        L = L->next;
    }
    p->next = L->next;
    L->next = p;
    return 0;
}

int Link_math::delete_link(Link_pnode L,int pos)
{
    if(-1 == empty_link(L))
        return -1;
    if(pos < 0 || pos > getlen_link(L))
        return -1;
    Link_pnode p = create_link();
    int i;
    for(i = pos-1;i > 0;i--)
    {
        L = L->next;
    }
    p = L->next;
    p->data = L->next->data;
    L->next = p->next;
    free(p);
    return p->data;
}

int main()
{
    Link_math obj;
    Link_pnode L = obj.create_link();
    obj.insert_link(L,1,12);
    obj.insert_link(L,2,3);
    obj.insert_link(L,3,33);
    obj.insert_link(L,4,61);
    obj.print_link(L);
    obj.delete_link(L,2);
    obj.print_link(L);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值