C++实现动态顺序表_C 语言

来源:脚本之家  责任编辑:小易  

/*int data[MAXSIZE]就是数据内存地址int length;就是数据长度删除插入就是数组移位includeincludeincludedefine MAXSIZE 100/顺序表最大长度typedef int Elemtype;typedef struct SqList{Elemtype data[MAXSIZE];int length;}SqList;SqList*newList();创建int Insert2List(SqList*sList,int n,int index);插入int delList(SqList*sList,int index);void showList(SqList*sList);输出int main(){int n,num,index;SqList*sList=newList();while(1){system("cls");printf("当前顺序表数据长度:%d\\n1、插入 \\n2、删除 \\n3、输出\\n",sList->length);scanf("%d",&n);switch(n){case 1:printf("请输入要插入的数值:"),scanf("%d",&num);printf("请输入要插入的位置:"),scanf("%d",&index);Insert2List(sList,num,index);break;case 2:printf("请输入要删除的位置:"),scanf("%d",&index);delList(sList,index);break;case 3:showList(sList);break;}printf("按任意键继续。\\n");getch();}return 0;}SqList*newList()/创建{SqList*newList=(SqList*)malloc(sizeof(SqList));if(newList)newList->length=0;return newList;}void showList(SqList*sList)/输出{int i;if(sList)for(printf("当前顺序表长度为%d,内容如下:\\n",sList->length),i=0;i<sList->length;i+)printf("%d",sList->data[i]);printf("\\n\\n");}int delList(SqList*sList,int index)/删除,成功返回1,失败返回0{int i;if(sList&sList->length=0){printf("删除失败!顺序表为空,无需删除\\n");return 0;}if!sList|index|index>sList->length){printf("删除失败!删除位置不合理!(1)\\n",sList->length);return 0;}if(index!sList->length+1)/如要删除的非尾部for(i=index-1;i<sList->length+1;i+)/删除位置及其后的元素前移动一位sList->data[i]=sList->data[i+1];sList->length-;return 1;}int Insert2List(SqList*sList,int n,int index)/插入,index是插入第几个元素位置,成功返回1,失败返回0{int i;if!sList)return 0;if(sList&sList->length=MAXSIZE){printf("插入失败!顺序表已满!\\n");return 0;}if!sList|index|index>sList->length+1){printf("插入失败!插入位置不合理!(1)\\n",sList->length+1);return 0;}if(index!sList->length+1)/如在非尾部添加for(i=sList->length;i>=index;i-)/插入位置之后的元素依次往后移动一位sList->data[i]=sList->data[i-1];sList->data[index-1]=n;sList->length+;return 1;}www.zgxue.com防采集请勿采集本网。

本文实例为大家分享了C++实现动态顺序表的具体代码,供大家参考,具体内容如下

你这是C++的代码,用C编译器编译不过的。如果是vc6里面,把你源程序的后缀改成.cpp再试试应该就可以了。

Vector.h

#define M 10 int a[M];int i=0,k=0,temp,n;for(i=0;i;i+) {temp=a[i];for(k=i;k;k+) if(a[k]>temp){n=a[k],a[k]=temp,a[i]=n;break;} } 此时数组已经按从大到小排好序,也就是a[M-1]是最小的。

#pragma once #include <stdio.h>#include <iostream>#include <assert.h>#include <string.h>using namespace std;typedef int DataType;class Vector{public: Vector() :_first(NULL) , _finish(NULL) , _endofstorage(NULL) {} Vector(const Vector& v) { if (v.Size() > 0) { _first = new DataType[v.Size()]; //只开辟原有数据所占空间大小,节省空间 memcpy(_first, v._first, sizeof(DataType)*v.Size()); if (_first) { _finish = _first + v.Size(); _endofstorage = _first + v.Size(); } else { _first = _finish = _endofstorage = NULL; } } } Vector& operator=(Vector& v) { if (this != &v) { ////传统写法 //DataType* tmp = new DataType[v.Size()]; //memcpy(tmp, _first, sizeof(DataType)*v.Size()); //delete[] _first; //_first = tmp; //_finish = _first + v.Size(); //_endofstorage = _first + v.Size(); //现代写法 swap(_first, v._first); swap(_finish, v._finish); swap(_endofstorage, v._endofstorage); } return *this; } ~Vector() { delete[] _first; _first = _finish = _endofstorage = NULL; } void Print() { DataType* cur = _first; while (cur != _finish) { cout << *cur << " "; ++cur; } cout << endl; } size_t Size() const; size_t Capacity() const; void Expand(size_t n); void PushBack(DataType x); void Reserve(size_t n); void PopBack(); void Insert(size_t pos, DataType x); void Erase(size_t pos); size_t Find(DataType x);private: DataType* _first; DataType* _finish; DataType* _endofstorage;};size_t Vector::Size() const{ return _finish - _first;}size_t Vector::Capacity() const{ return _endofstorage - _first;}void Vector::Expand(size_t n){ if (n > Capacity()) { size_t size = Size(); DataType* tmp = new DataType[n]; memcpy(tmp, _first, sizeof(DataType)*size); delete[] _first; _first = tmp; _finish = _first + size; //切记更新新的_finish和_endofstorage _endofstorage = _first + n; }}void Vector::PushBack(DataType x){ //if (_finish == _endofstorage) //{ // if (Capacity() == 0) // { // Expand(3); // } // else // { // Expand(Capacity() * 2); // } //} //*_finish = x; //++_finish; Insert(Size(), x);}void Vector::Reserve(size_t n){ if (n > Capacity()) { Expand(n); }}void Vector::PopBack(){ assert(_finish > _first); --_finish;}void Vector::Insert(size_t pos, DataType x){ assert(pos <= Size()); if (_finish == _endofstorage) { if (Capacity() == 0) { Expand(3); } else { Expand(Capacity() * 2); } } int end = Size() - 1; while (end >= (int)pos) { _first[end + 1] = _first[end]; --end; } _first[pos] = x; ++_finish;}void Vector::Erase(size_t pos){ assert(pos < Size()); size_t cur = pos; while (cur < Size() - 1) { _first[cur] = _first[cur + 1]; ++cur; } --_finish;}size_t Vector::Find(DataType x){ DataType* cur = _first; while (cur != _finish) { if (*cur == x) { return cur - _first; } ++cur; } return -1;}void TestVector(){ Vector v1; v1.PushBack(1); v1.PushBack(2); v1.PushBack(3); v1.PushBack(4); v1.Print(); size_t pos = v1.Find(2); printf("pos expect 1,actual %lu\n", pos); Vector v2(v1); v2.Insert(0, 0); v2.Print(); Vector v3; v3 = v2; v3.Print(); v3.Erase(1); v3.Print();}

给你个参考 定义ElemType为int类型*/ typedef int ElemType;顺序表存储空间的总分配量*/ define MAXSIZE 100 define FALSE 0 define TRUE 1 顺序存储类型*/ typedef struct {ElemType data

test.cpp

include include typedef struct nlist { int*np;int len;已使用地址个数 int maxlen;最大地址个数 }NLT;NLT*createlist();创建顺序表 int addtolist(NLT*nlist);向顺序表插入元素 void pList

#include "Vector.h"int main(){ cout << "顺序表:" << endl; TestVector(); return 0;}

-顺序表.h include include include define LIST_INIT_SIZE 100 define LISTINCREMENT 10 define TRUE 1 define FLASE 0 typedef int Elemtype;typedef int Status;接口定义 Status InitList_Sq

效果:

既然是C++,那就用stl的list来做。初始化、插入、删除、定位、改变值、遍历、销毁都很容易。如果需要排序,研究下algorithm的sort函数。学习C++,STL很重要也很方便,既然是C++,那就用stl的list来做。初始化、插入、删除、定位、改变值、遍历、销毁都很容易。如果需要排序,研究下algorithm的sort函数。学习C++,STL很重要也很方便。本回答被提问者采纳内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • c++顺序表的基本操作(使用模版类)
  • c++顺序表的实例代码
  • 利用c++简单实现顺序表和单链表的示例代码
  • c++实现顺序表的常用操作(插入删出查找输出)
  • c++实现顺序表的方法
  • 如何在c++中建立一个顺序表
  • 深入解读c语言中的符号常量eof
  • c++实现俄罗斯方块
  • c语言中使用lex统计文本文件字符数
  • 最小生成树算法c语言代码实例
  • c++ 中继承与动态内存分配的详解
  • vc6.0如何创建以及调用动态链接库实例详解
  • c++实现寻找最低公共父节点的方法
  • c语言 数据结构堆排序顺序存储(升序)
  • 关于c语言的一个小bug详解
  • c++类url编码和解码使用技巧
  • C++或C语言编写程序:利用顺序表的基本操作实现学生信息管理。
  • C语言(非c++,c#)怎么实现顺序表的创插删输出的操作?
  • 线性表顺序存储的12个基本操作,求c语言程序,在c++6.0环境下编译的
  • c语言实现两个顺序表的合并
  • 一个C语言的基础问题,C语言实现顺序表。
  • 用c语言实现建立顺序表 并查找最小的元素
  • 上机题 1.在C/C++中编写以下对顺序表进行基本操作的算法(参阅P19-20)
  • 数据结构 用C语言实现顺序表的建立及遍历
  • c语言实现顺序表?
  • 用C语言创建一个顺序表并完成插入等操作
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页c++顺序表的基本操作(使用模版类)c++顺序表的实例代码利用c++简单实现顺序表和单链表的示例代码c++实现顺序表的常用操作(插入删出查找输出)c++实现顺序表的方法如何在c++中建立一个顺序表深入解读c语言中的符号常量eofc++实现俄罗斯方块c语言中使用lex统计文本文件字符数最小生成树算法c语言代码实例c++ 中继承与动态内存分配的详解vc6.0如何创建以及调用动态链接库实例详解c++实现寻找最低公共父节点的方法c语言 数据结构堆排序顺序存储(升序)关于c语言的一个小bug详解c++类url编码和解码使用技巧c语言程序设计50例(经典收藏)c语言10个经典小程序c语言字符串操作总结大全(超详细c语言文件操作函数大全(超详细)c语言字符数组与字符串的使用详解c语言运算符优先级列表(超详细)c语言/c++中如何产生随机数c++中的string常用函数用法总结深入理解c++中public、protectedc++常用字符串分割方法实例汇总c++支持coroutine的简单示例c++输入输出操作符重载的深入分析c++统计中英文大小写字母、数字、空格及其c语言使用结构体实现简单通讯录从汇编看c++中的多态详解c++实现景区信息管理系统c语言实现通讯管理系统设计深入理解c语言的逻辑控制深入理解c++中char*与wchar_t*与string以关于stl中vector容器的一些总结
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved