CloudLunar
主页
知识库
人文社科
自然科学
跨学科领域
热门分类
算法及题库
云璟月's
墨色集(设计)
指尖集(代码)
未央集(随笔)
流觞集(语录)
如花集(书影)
纸鸢集(小说)
登录
B站
微博
人人
开心
Twitter
Facebook
RSS订阅链接
留言板
关于我
在社交网站上关注我
B站
微博
人人
开心
Twitter
Facebook
RSS订阅
RSS订阅链接
留言板
关于我
查看顺序表的源代码
←
顺序表
因为以下原因,你没有权限编辑本页:
你刚才请求的操作只对属于该用户组的用户开放:
用户
您可以查看并复制此页面的源代码:
[[分类::数据结构]] 事实证明一个能够自动扩展的顺序表也是可以折腾人的0u0 <pre> #include<iostream>#include<cstdlib>#include<cstring>#include<cmath>namespace cus { template<typename T> class Vector { T* v; size_t length; size_t cap; void rearrange(size_t logLen) { size_t newLen =( 1 << logLen); if (newLen > cap) { T* from = v; T* to = static_cast<T*>(malloc(sizeof(T)*newLen)); memcpy(to, from, length); free(v); v = to; } cap = newLen; } void reallocate(size_t n) { rearrange(1+ static_cast<int>(log2(n))); } public: Vector() :v(nullptr), length(0), cap(0) {} Vector(T* ori, size_t len) { reallocate(len); memcpy(v, ori, len); } Vector(T* ori, size_t from, size_t len) { reallocate(len); memcpy(&v[from], ori, len); } void resize(size_t n) { reallocate(n); for (int i = length;i < n;++i) { v[i] = 0; } length = n; } void push_back(const T &x) { if (length + 1 >= cap)reallocate(length + 1); v[length++] = x; } friend std::ostream& operator <<(std::ostream& os,Vector a) { for (unsigned i = 0;i < a.size();++i) { os << a[i] << " "; } return os; } inline size_t size() const { return length; } inline size_t capacity() const { return cap; } bool empty() const { return size() == 0; } T& at(size_t index) { if (index >= length)return v[0]; return v[index]; } T& operator [](size_t index) { if (index >= length)return v[0]; return v[index]; } T* find(const T &x) const { for (unsigned i = 0;i < length;++i) { if (v[i] == x) { return &v[i]; } } return nullptr; } size_t find_index(const T &x) const { auto rtn = find(x); if (rtn == nullptr)return static_cast<size_t>(-1); return x; } T* insert(const T* pos,const T& x) { if (length + 1 >= cap)reallocate(length + 1); size_t id = pos - v; if (id >= length)return nullptr; for (auto i =id;i < length;++i) { v[i+1] = v[i]; } ++length; v[id] = x; return &v[id]; } T* insert(size_t index, const T& x) { return insert(v + index, x); } T* erase(const T* pos) { size_t id = pos - v; if (id >= length)return nullptr; --length; for (unsigned i = id;i < length;++i) { v[i] = v[i+1]; } return &v[id]; } T* erase(size_t index) { return erase(v + index); } ~Vector() { if (v == nullptr)return; free(v); } };}int main(){ cus::Vector<int> s; while(1) { int a; std::cin>>a; s.push_back(a); std::cout<<s.size()<<" "<<s.capacity()<<std::endl; } std::cout<<"(1)初始化顺序表L;"<<std::endl; cus::Vector<char> L; std::cout<<"(2)依次采用尾插法插入a, b, c, d, e元素;"<<std::endl; char a, b, c, d, e; std::cin >> a >> b >> c >> d >> e; L.push_back(a); L.push_back(b); L.push_back(c); L.push_back(d); L.push_back(e); std::cout<<"(3)输出顺序表L;"<<std::endl; std::cout << L << std::endl; std::cout<<"(4)输出顺序表L长度;"<<std::endl; std::cout << "size:" << L.size() << std::endl; std::cout<<"(5)判断顺序表L是否为空;"<<std::endl; std::cout << "isEmpty:" << L.empty() << std::endl; std::cout<<"(6)输出顺序表L的第3个元素;"<<std::endl; std::cout << L << std::endl; std::cout << "3rd:" << L[2] << std::endl; std::cout<<"(7)输出元素'a'的位置;"<<std::endl; std::cout << "a is at:" << L.find_index('a') << std::endl; std::cout<<"(8)在第4个元素位置上插入'f'元素;"<<std::endl; L.insert(3, 'f'); std::cout<<"(9)输出顺序表L;"<<std::endl; std::cout << L << std::endl; std::cout<<"(10)删除L的第3个元素;"<<std::endl; L.erase(2); std::cout<<"(11)输出顺序表L;"<<std::endl; std::cout << L << std::endl; std::cout<<"(12)释放顺序表L。"<<std::endl; system("pause"); return 0;}</pre>
返回
顺序表
。
著作权声明
[
编辑
]
除非另有说明,本
网站内容
采用
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
进行许可(中国大陆可以参照
知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议
,如有不同以前者为准)。
如果需要商业化使用,请另联系作者取得授权。
关于
[
编辑
]
联系
@云璟月Lunar
的新浪微博
本站RSS:
RSS链接