zoukankan      html  css  js  c++  java
  • 数据结构-顺序表-c++实现

    一、线性表分类(链表)

    线性表:n个元素
    操作系统?
    线性表分类:

    • 顺序表(数组)
    • 链表:
      • 静态链表
      • 单链表
      • 循环链表
      • 双向链表

    二、线性表操作

    一般线性表操作:
        MyArray(int size);//构造函数
    	~MyArray();//析构
    	int get_length();//长度获取。
    	bool get_empty();//判空。
    	bool get_ele(int i, int* m);//获得某位置元素。
    	int get_location(int* m, int* location);//定位元素。
    	bool get_pre(int i, int *m);//获得前驱。
    	bool get_post(int i, int* m);//获得后继。
    	bool get_delete(int loc);//删除某位置元素
    	void  get_push(int *num);
    	bool get_insert(int loc,int* m);//插入某位置元素
    	void get_clear();//清空。
    	void get_traverse();//遍历。
    

    代码如下

    //.h file
    #pragma once
    #include<iostream>
    using namespace std;
    class MyArray
    {
    public:
    	MyArray(int size);
    	~MyArray();
    	int get_length();//长度获取。
    	bool get_empty();//判空。
    	bool get_ele(int i, int* m);//获得某位置元素。
    	int get_location(int* m, int* location);//定位元素。
    	bool get_pre(int i, int *m);//获得前驱。
    	bool get_post(int i, int* m);//获得后继。
    	bool get_delete(int loc);//删除某位置元素
    	void  get_push(int *num);
    	bool get_insert(int loc,int* m);//插入某位置元素
    	void get_clear();//清空。
    	void get_traverse();//遍历。
    private:
    	int m_size;
    	int m_length;
    	int* m_p;
    
    };
    
    //.cpp file
    #include"MyArray.h"
    MyArray::MyArray(int size)
    {
    	m_size = size;
    	m_length = 0;
    	m_p = new int[m_size];
    }
    int MyArray::get_length()
    {
    	return m_length;
    }//长度获取。
    bool MyArray::get_empty()
    {
    	return m_length == 0 ? true : false;
    }//判空。
    bool MyArray::get_ele(int i, int* m)
    {
    	if (i < 0 || i >= m_length)
    	{
    		cout << "Invalid index!" << endl;
    		return false;
    	}
    	else
    	{
    		*m = m_p[i];
    		return true;
    	}
    }//获得某位置元素。
    int MyArray::get_location(int* m, int* location)
    {
    	for (int i = 0; i < m_length; i++)
    	{
    		if (*m == m_p[i])
    		{
    			cout << "location:"<<i << endl;
    			*location = i;
    			return 0;
    		}
    	}
    	return -1;
    }//定位元素。
    bool MyArray::get_pre(int i, int* m)
    {
    	if (i < 0 || i >= m_length)
    	{
    		cout << "Invalid index!" << endl;
    		return false;
    	}
    	else
    	{
    		if (i == 0)
    		{
    			return false;
    		}
    		else
    		{
    			*m = m_p[i - 1];
    			return true;
    		}			
    	}
    }//获得前驱。
    bool MyArray::get_post(int i, int* m)
    {
    	if (i < 0 || i >= m_length)
    	{
    		cout << "Invalid index!" << endl;
    		return false;
    	}
    	else
    	{
    		if (i == (m_length-1))
    		{
    			return false;
    		}
    		else
    		{
    			*m = m_p[i+1];
    			return true;
    		}
    	}
    }//获得后继。
    bool MyArray::get_delete(int loc)
    {
    	if (loc < 0 || loc > m_length)
    	{
    		cout << "Invalid index!" << endl;
    		return false;
    	}
    	else
    	{
    		for (int i = loc; i < m_length; i++)
    		{
    			m_p[i] = m_p[i+1];
    		}
    		m_length--;
    		return true;
    	}
    }//删除某位置元素
    bool MyArray::get_insert(int loc,int *m)
    {
    
    	if (loc < 0 || loc >m_length)
    	{
    		cout << "Invalid index!" << endl;
    		return false;
    	}
    	else
    	{
    		
    		for (int i = m_length; i > loc; i--)
    		{
    			m_p[i+1] = m_p[i];
    		}
    		m_p[loc] = *m;
    		m_length++;
    		return true;
    	}
    }//插入某位置元素
    void MyArray::get_clear()
    {
    	m_length = 0;
    }//清空。
    void MyArray::get_traverse()
    {
    	for (int i = 0; i < m_length; i++)
    	{
    		cout << m_p[i] << endl;
    	}
    }//遍历。
    void MyArray::get_push(int* num)
    {
    	m_p[m_length] = *num;
    	m_length++;
    }
    MyArray::~MyArray()
    {
    	delete []m_p;
    	m_p = NULL;
    }
    
    //测试main.cpp
    #include"MyArray.h"
    int main()
    {
        //插入和遍历函数测试
    	MyArray* p = new MyArray(6);
    	int m1 = 0;
    	int m2 = 1;
    	int m3 = 2;
    	int m4 = 3;
    	int m5 = 4;
    	p->get_push(&m1);
    	p->get_push(&m2);
    	p->get_push(&m3);
    	p->get_traverse();//遍历
    	cout << endl;
    
        //指定位置插入元素和获取指定位置元素函数测试
    	p->get_insert(2, &m1);
    	int loc_num;
    	p->get_ele(2,&loc_num);
    	cout << loc_num << endl;
    	cout << endl;
    
        //清空函数测试
    	p->get_clear();
    	p->get_traverse();//遍历
    	cout << endl;
    
        //删除指定元素函数测试
    	p->get_push(&m1);
    	p->get_push(&m2);
    	p->get_push(&m3);
    	p->get_push(&m4);
    	p->get_push(&m5);
    	p->get_delete(2);
    	cout << endl;
    	p->get_traverse();//遍历
    
        //获得指定位置元素的前驱和后继函数测试
    	int num1;
    	p->get_post(2,&num1);
    	int num2;
    	p->get_pre(2,&num2);
    	cout << endl;
    	cout << "num1:" << num1 << "num2:" << num2 << endl;
    
    	return 0;
    }
    
    Higher you climb, more view you will see.
  • 相关阅读:
    WIKI·常用数据库默认端口
    .Net·VS·三板斧解决断点无法命中的多种情况
    异常处理·EF·准备命令定义时发生错误。有关详细信息,请参阅内部异常
    H.264的三种开源编码器比较
    Color Basics
    重建Windows 7的图标缓存
    Prebuilt binaries of PCL (point cloud library) for Linux
    清除ubuntu内核列表中的旧内核
    H.264开源解码器评测
    MATLAB中设置figure的边框
  • 原文地址:https://www.cnblogs.com/yyfighting/p/12500616.html
Copyright © 2011-2022 走看看