zoukankan      html  css  js  c++  java
  • 【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 > DefaultSize ?

    sz : DefaultSize; base = new Type[capacity]; size = 0; } ~SeqList() { destroy(); /* delete []base; base = NULL; capacity = size = 0;*/ } public: Status Inc() { Type *newbase = new Type[capacity + INC_SIZE]; if (newbase == NULL) { return FALSE; } memcpy(newbase, base, sizeof(Type)*size); delete[]base; base = newbase; capacity += INC_SIZE; return TRUE; } Status merge(SeqList<Type> <1, SeqList<Type> <2) { int i = 0; int j = 0; int k = 0; while (i < lt1.size && j < lt2.size) { if (lt1.base[i] > lt2.base[j]) { base[k++] = lt2.base[j++]; } else { base[k++] = lt1.base[i++]; } } while(i < lt1.size) { base[k++] = lt1.base[i++]; } while (j < lt2.size) { base[k++] = lt2.base[j++]; } size = lt1.size + lt2.size; return TRUE; } Status IsFull() const { if (size >= capacity) { return TRUE; } else { return FALSE; } } Status Empty() const { if (size == 0) { return TRUE; } else { return FALSE; } } Status push_back(const Type& x) { if (IsFull() && !Inc()) { cout << "IsFull!不能尾插" << x << endl; return FALSE; } base[size++] = x; return TRUE; } Status push_front(const Type& x) { if (IsFull() && !Inc()) { cout << "IsFull!不能头插" << x << endl; return FALSE; } for (int i = size; i > 0; --i) { base[i] = base[i - 1]; } base[0] = x; size++; return TRUE; } Status pop_back() { if (Empty()) { cout << "Empty!不能尾删" << endl; return FALSE; } size--; return TRUE; } Status pop_front() { if (Empty()) { cout << "Empty!不能头删" << endl; return FALSE; } for (int i = 0; i < size; ++i) { base[i] = base[i + 1]; } size--; return TRUE; } Status insert_val(const Type& x) { if (IsFull() && !Inc()) { cout << "IsFull!不能按值插入" << x << endl; return FALSE; } int i = 0; while (base[i] < x && i < size) { i++; } insert_pos(i, x); return TRUE; } Status insert_pos(int pos, const Type& x) { if (IsFull() && !Inc()) { cout << "IsFull! 不能按位置插入" << endl; return FALSE; } if (pos < 0 || pos > size) { return FALSE; } for (int i = 0; i < size; ++i) { if (i == pos) { for (int j = size; j > i; --j) { base[j] = base[j - 1]; } } } base[pos] = x; size++; return TRUE; } int find(const Type& x) { if (size == 0) { return -1; } for (int i = 0; i < size; ++i) { if (base[i] == x) { return i; } } } Status delete_pos(int pos) { if (pos < 0 || pos > size) { return FALSE; } for (int i = 0; i < size; ++i) { if (i == pos) { for (int j = i; j < size; ++j) { base[j] = base[j + 1]; } break; } } size--; return TRUE; } Status delete_val(const Type& x) { int key = find(x); if (key == -1) { return FALSE; } delete_pos(key); return TRUE; /*if(Empty()) { cout << "Empty!" << endl; return FALSE; } for(int i = 0; i < size; ++i) { if(base[i] == x) { for(int j = i; j < size; ++j) { base[j] = base[j+1]; } break; } } size--; return TRUE;*/ } void sort() { if (size == 0 || size == 1) { return; } for (int i = 0; i < size - 1; ++i) { for (int j = 0; j < size - i - 1; ++j) { if (base[j] > base[j + 1]) { int tmp = base[j]; base[j] = base[j + 1]; base[j + 1] = tmp; } } } } void resver() { if (size == 0 || size == 1) { return; } for (int i = 0, j = size - 1; i < j; ++i, --j) { int tmp = base[i]; base[i] = base[j]; base[j] = tmp; } } int length() { return size; } void clear() { size = 0; } Status destroy() { if (base == NULL) { return FALSE; } delete[]base; base = NULL; size = capacity = 0; return TRUE; } Status modify_val(const Type& x, const Type& y) { int key = find(x); if (key == -1) { return FALSE; } modify_pos(key, y); return TRUE; } Status modify_pos(int pos, const Type& x) { if (pos < 0 || pos > size) { return FALSE; } for (int i = 0; i < size; ++i) { if (i == pos) { base[i] = x; } } return TRUE; } void show_list() { for (int i = 0; i < size; ++i) { cout << base[i] << ' '; } cout << endl; } private: enum {DefaultSize = 20, INC_SIZE = 3}; Type *base; int capacity; int size; };</strong></span>


    <span style="font-size:18px;"><strong>#include "SeqList.h"
    
    void main()
    {
    	SeqList<int> It1;
    	SeqList<int> It2;
    	SeqList<int> mylist;
    
    	int select = 1;
    	int pos;
    	int item;
    	system("Color 0d");
    	while (select)
    	{
    		cout << "************************************" << endl;
    		cout << "* [0]  quit_system [1] push_back   *" << endl;
    		cout << "* [2]  push_front  [3] show_list   *" << endl;
    		cout << "* [4]  pop_back    [5] pop_front   *" << endl;
    		cout << "* [6]  insert_val  [7] insert_pos  *" << endl;
    		cout << "* [8]  find        [9] delete_pos  *" << endl;
    		cout << "* [10] delete_val [11] sort        *" << endl;
    		cout << "* [12] resver     [13] length      *" << endl;
    		cout << "* [14] clear      [15] destroy     *" << endl;
    		cout << "* [16] modify_val [17] modify_pos  *" << endl;
    		cout << "* [18] merge                       *" << endl;
    		cout << "************************************" << endl;
    		cout << "请选择:>";
    		cin >> select;
    		switch (select)
    		{
    		case 1:
    			cout << "请输入要插入的数据(-1结束):>";
    			while (cin >> item, item != -1)
    			{
    				mylist.push_back(item);
    			}
    			break;
    		case 2:
    			cout << "请输入要插入的数据(-1结束):>";
    			while (cin >> item, item != -1)
    			{
    				mylist.push_front(item);
    			}
    			break;
    		case 3:
    			system("cls");
    			mylist.show_list();
    			system("pause");
    			break;
    		case 4:
    			mylist.pop_back();
    			break;
    		case 5:
    			mylist.pop_front();
    			break;
    		case 6:
    			cout << "请输入要插入的值:>";
    			cin >> item;
    			mylist.insert_val(item);
    			break;
    		case 7:
    			cout << "请输入要插入的值的下标:>";
    			cin >> pos;
    			cout << "请输入要插入的值";
    			cin >> item;
    			mylist.insert_pos(pos, item);
    			break;
    		case 8:
    			cout << "请输入要查找的值:>";
    			cin >> item;
    			cout << "该值下标为:" << mylist.find(item) << endl;
    			break;
    		case 9:
    			cout << "请输入要删除的值的下标:>";
    			cin >> item;
    			mylist.delete_pos(item);
    			break;
    		case 10:
    			cout << "请输入要删除的值:>";
    			cin >> item;
    			mylist.delete_val(item);
    			break;
    		case 11:
    			mylist.sort();
    			break;
    		case 12:
    			mylist.resver();
    			break;
    		case 13:
    			cout << "线性表的长度为:" << mylist.length() << endl;
    			break;
    		case 14:
    			mylist.clear();
    			break;
    		case 15:
    			mylist.destroy();
    			break;
    		case 16:
    			cout << "请输入要改动的值:>";
    			cin >> item;
    			cout << "请输入改动后的值:>";
    			cin >> pos;
    			mylist.modify_val(item, pos);
    			break;
    		case 17:
    			cout << "请输入要改动的值的下标:>";
    			cin >> pos;
    			cout << "请输入改动后的值:>";
    			cin >> item;
    			mylist.modify_pos(pos, item);
    			break;
    		case 18:
    			for (int i = 1; i < 10; i += 2)
    			{
    				It1.push_back(i);
    			}
    			for (int i = 2; i <= 10; i += 2)
    			{
    				It2.push_back(i);
    			}
    			mylist.merge(It1, It2);
    			mylist.show_list();
    		default:
    			break;
    		}
    	}
    }
    
    	</strong></span>

    执行结果例如以下:





  • 相关阅读:
    邮箱启用授权码发送邮件
    try里Response.end()问题
    NPOI导入excel文件为DataTable,使用SqlBulkCopy添加到数据库表
    Python入门(二)
    Python入门(一):PTVS写Python程序,调试模式下input()提示文字乱码问题
    【译】第4节---简单的Code First示例
    【译】第3节--- 配置开发环境
    【译】第2节--- 什么是Code First?
    【译】第1节--- EF Code First 介绍
    多条件查询----补发周一内容(六级让我忽略了JAVA)
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/6984866.html
Copyright © 2011-2022 走看看