C++ 顺序表的基本操作

顺序表的基本操作:

"seqlist.h"头文件

#ifndef SEQLIST_H_INCLUDED
#define SEQLIST_H_INCLUDED

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

template <class Type>
class SeqList
{
public:
    SeqList(size_t sz = INIT_SIZE);
    bool IsFull() const
    {
        return size >= capacity;
    }
    bool IsEmpty() const
    {
        return size == 0;
    }
    void show_list();
    void push_back(const Type& x);
    void push_front(const Type& x);
    void pop_back();
    void pop_front();
    void insert_pos(int pos,const Type& x);
    void insert_val(const Type& x);
    void delete_pos(int pos);
    void delete_val(const Type& x);
    int find(const Type& x);
    int length() const;
    void clear();
    void destory();
    void resver();
    void sort();

private:
    enum{INIT_SIZE = 10};
    Type *base;
    size_t capacity;
    size_t size;
};

template<class Type>
SeqList<Type>::SeqList(size_t sz)
{
	capacity = sz > INIT_SIZE ? sz : INIT_SIZE;
	base = new Type[capacity];
	size = 0;
}

template<class Type>
void SeqList<Type>::show_list()
{
	for(int i=0; i<size; ++i)
	{
		cout<<base[i]<<" ";
	}
	cout<<endl;
}

template<class Type>
void SeqList<Type>::push_back(const Type &x)
{
	if(IsFull())
	{
		cout<<"顺序表已满,不能插入!"<<endl;
		return;
	}
	base[size++] = x;
}

template<class Type>
void SeqList<Type>::push_front(const Type &x)
{
	if(IsFull())
	{
		cout<<"顺序表已满,不能插入!"<<endl;
		return;
	}
	for(int i=size; i>0; --i)
	{
		base[i] = base[i-1];
	}
	base[0] = x;
	size++;
}

template<class Type>
void SeqList<Type>::pop_back()
{
    if(IsEmpty())
	{
		cout<<"顺序表为空,不能删除!"<<endl;
		return;
	}
	size--;
}

template<class Type>
void SeqList<Type>::pop_front()
{
    if(IsEmpty())
	{
		cout<<"顺序表为空,不能删除!"<<endl;
		return;
	}
    for(int i=0; i<size; ++i)
    {
        base[i] = base[i+1];
    }
    size--;
}

template<class Type>
void SeqList<Type>::insert_pos(int pos,const Type &x)
{
	if(pos<0 || pos>size)
	{
		cout<<"要插入的位置非法!"<<endl;
		return;
	}
	if(IsFull())
	{
		cout<<"顺序表已满,不能插入!"<<endl;
		return;
	}

	for(int i=size; i>pos; --i)
	{
		base[i] = base[i-1];
	}
	base[pos] = x;
	size++;
}

template<class Type>
void SeqList<Type>::insert_val(const Type& x)
{
    int pos = find(x);
    if(pos == -1)
    {
        return;
    }
	for(int i=size; i>=pos; --i)
	{
		base[i+1] = base[i];
	}
	base[pos] = x;
	size++;
}

template<class Type>
void SeqList<Type>::delete_pos(int pos)
{
	for(int i=pos; i<size; ++i)
	{
		base[i] = base[i+1];
	}
	size--;
}

template<class Type>
void SeqList<Type>::delete_val(const Type &x)
{
	int pos = find(x);
	if(pos == -1)
	{
		return;
	}
    for(int i=pos; i<size; ++i)
	{
		base[i] = base[i+1];
	}
	size--;
}

template<class Type>
int SeqList<Type>::find(const Type& x)
{
    for(int i=0; i<size; ++i)
	{
		if(base[i] == x)
			return i;
	}
	return -1;
}

template<class Type>
int SeqList<Type>::length() const
{
	return size;
}

template<class Type>
void SeqList<Type>::clear()
{
	size = 0;
}

template<class Type>
void SeqList<Type>::destory()
{
	delete []base;
	base = NULL;
}

template<class Type>
void SeqList<Type>::resver()
{
	for(int i=0; i<size/2; ++i)
	{
		int temp =base[i];
		base[i] = base[size-i-1];
		base[size-i-1] = temp;
	}
	for(int i=0; i<size; ++i)
    {
        cout<<base[i]<<" ";
    }
	cout<<endl;
}

template<class Type>
void SeqList<Type>::sort()
{
	for(int j=0; j<size-1; ++j)
    {
        for(int i=0; i<size-1-j; ++i)
        {
            if(base[i]>base[i+1])
            {
                int temp = base[i];
                base[i] = base[i+1];
                base[i+1] =  temp;
            }
        }
    }
    for(int i=0;i<size;++i)
    {
        cout<<base[i]<<" ";
    }
	cout<<endl;
}
#endif // SEQLIST_H_INCLUDED

主函数:

#include "SeqList.h"

int main()
{
    SeqList<int> mylist;
    int select = 1;
    int Item;
    int pos;
    while(select)
    {
        system("CLS");
        cout<<"*************************************"<<endl;
        cout<<"* [0]quit_system      [1]show_list  *"<<endl;
        cout<<"* [2]push_back        [3]push_front *"<<endl;
        cout<<"* [4]pop_back         [5]pop_front  *"<<endl;
        cout<<"* [6]insert_pos       [7]insert_val *"<<endl;
        cout<<"* [8]delete_pos       [9]delete_val *"<<endl;
        cout<<"* [10]find            [11]length    *"<<endl;
        cout<<"* [12]clear           [13]destory   *"<<endl;
        cout<<"* [14]resver          [15]sort      *"<<endl;
        cout<<"*************************************"<<endl;
        cout<<"请输入你的选择:>";
        cin>>select;
        switch(select)
		{
        case 1:
			mylist.show_list();
			system("pause");
			break;
		case 2:
			cout<<"请输入要插入的值(-1结束):>";
			while(cin>>Item, Item!=-1)
			{
				mylist.push_back(Item);
			}
			break;
		case 3:
			cout<<"请输入要插入的值(-1结束):>";
			while(cin>>Item, Item!=-1)
			{
				mylist.push_front(Item);
			}
			break;
		case 4:
            mylist.pop_back();
            break;
        case 5:
            mylist.pop_front();
            break;
		case 6:
			cout<<"请输入要插入的位置:>";
			cin>>pos;
			cout<<"请输入要插入的值:>";
			cin>>Item;
			mylist.insert_pos(pos,Item);
			break;
		case 7:
			cout<<"请输入要插入的值:>";
			cin>>Item;
			mylist.insert_val(Item);
			break;
		case 8:
			cout<<"请输入要删除的位置:>";
			cin>>pos;
			mylist.delete_pos(pos);
			break;
		case 9:
			cout<<"请输入要删除的值:>";
			cin>>Item;
			mylist.delete_val(Item);
			break;
		case 10:
			cout<<"请输入要查找的值:>";
			cin>>Item;
			pos = mylist.find(Item);
			cout<<pos<<endl;
			system("pause");
			break;
		case 11:
			pos = mylist.length();
			cout<<pos<<endl;
			system("pause");
			break;
		case 12:
			mylist.clear();
			break;
		case 13:
			mylist.destory();
			break;
		case 14:
			mylist.resver();
			system("pause");
			break;
		case 15:
			mylist.sort();
			system("pause");
			break;
		default:
			break;
        }
    }
    return 0;
}
时间: 2024-12-11 13:44:04

C++ 顺序表的基本操作的相关文章

顺序表的基本操作

#include<stdio.h> #define MAXSIZE 100 //顺序表的结果定义 typedef struct{ int data[MAXSIZE]; int num; }SeqList; //建立顺序表 void CreateSeqList(SeqList *S){ S->num = 0; } //尾部插入元素 void Insert_Tail(SeqList *S,int e){ S->data[++S->num] = e; } //随机插入 void I

数据结构:顺序表的基本操作

顺序表作业: #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; typedef int T; class SeqList{ private: T *data; int MaxSize; ///顺序表最多可以存放的元素个数. int last; ///顺序表最后一个元素的下标,初始值为-1. public: SeqList(int sz); void Input();

每天一个小程序——顺序表的基本操作!

#include<stdio.h> #define max 100 typedef struct{ int data[max]; int last;}List; void Init(List *L)//顺序表初始化{ //L.data[0]=0; L->last=0;} void Createlist(List *L,int n){    int i;    printf("请输入顺序表元素:\n");    for(i=0;i<n;i++) {       

顺序表的基本操作——增删查改

顺序表:用一组地址连续的存储单元依次存储数据元素的线性结构. 线性表概念--是一种可以在任意位置进行插入和删除数据元素操作的.由n(n>=0)个相同类型数据元素组成的有限序列.

顺序表中基本操作

前言:最近玩esp8266和ucos-iii以及在学c++比较多,接触的大部分都是指针.结构体.链表:刚好自己又在看数据结构(数据结构真的非常重要,要好好学,是学算法的敲门砖,哈哈哈),个人看法在对顺序表进行元素增和删操作,效率比较低(要移动非常多的其他元素),而我之前写的对链表操作,使用指针操作,效率就高多了.好了,来看今天的学习总结吧! 一.顺序表的初始化: 算法步骤: 1.为顺序表L动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址 2.将表的当前长度设为0 伪代码实现: S

c语言实现顺序表的基本操作

转自 https://www.cnblogs.com/rookiefly/p/3425075.html 原作者:Step by Step 经过三天的时间终于把顺序表的操作实现搞定了.(主要是在测试部分停留了太长时间) 1;线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素. 2;采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构. 3;顺序表的定义及操作集合:头文件为defs.h 1 #ifndef _DEFS_H

一个简单顺序表的基本操作

#include <stdio.h>#include <stdlib.h>#define Max_Size 100 /*线性表可能达到的最大长度*/typedef int DataType;typedef struct List{ DataType data[Max_Size]; /*用于存放数据元素数组 */ int length; /* 当前表长度*/}SeqList; void InitList (SeqList &L){ L.length=0;} int Loc

【C++/数据结构】顺序表的基本操作

<span style="font-size:18px;"><strong>#pragma once #include <iostream> using namespace std; typedef enum { FALSE, TRUE }Status; template<class Type> class SeqList { public: SeqList(int sz = DefaultSize) { capacity = sz &g

[BS]线性表-顺序表基本操作

线性表分为顺序表和链表. 顺序表的基本操作如下: #include <stdio.h> #include <stdlib.h> /*---------------------------------------------*/ #define INIT_VOLUME_OF_LIST 100 #define INCRESE_VOLUME 10 /*---------------------------------------------*/ typedef char ElemType