DS作业·写了一个链表
用struct手写了个list
有push_back,push_front,insert,erase reserve,size,setpos,rbegin 功能。
坑:一开始想用template<class T>结果总是编译错误(漏写了<T>)
改成int后总是地址错误,(因为没有new地址)
然后网上学(抄)了一下class的一个程序,总是编译报错orz
最后自己拙劣地写出了一个数据结构,100行左右注//释掉的是class版本:
#include<iostream>
#include <string>
#include<list>
#include<fstream>
using namespace std;
list<int> l;
typedef long long ll, rr;
const int H = 1e9;
struct mlist {
int d;
mlist *prior;
mlist *next;
mlist(int d=, mlist* prior = NULL, mlist* next = NULL) :d(d), prior(prior), next(next) {}//指向自己。
mlist * setpos(int i) {
mlist *p = next;
int count = ;
if (i < ) {
cout << "illegal find" << endl; return NULL;
}
while (p != NULL&&count<i) {
p = p->next;
count++;
}
return p;
}
mlist* rbegin() {
mlist *p = next;
while (p != NULL)p = p->next;
return p;
}
void pb(int x) {//find this list's end,attach to it;
if (next == NULL) {
mlist *now=new mlist(x, next, NULL);
next = now;
return;
}
mlist *p = next;
while (p->next != NULL)p = p->next;
mlist *now;
now = new mlist(x, p, NULL);
p->next = now; }
void pf(int x) {//find this list's end,attach to it;
if (next == NULL) {
mlist *now = new mlist(x, next, NULL);
next = now;
return;
} mlist *now;
now = new mlist(x, next->prior, next);
next = now; }
bool insert(int i, int x) {//第i个后面插入x,i从1开始
if (i == ) pf(x);
else {
mlist *p = next, *q;
if ((p =setpos(i )) == NULL) {//前1个
cout << "illegal insertion" << endl;
return false;
}
q = new mlist(x, p->prior, p->next);
p->next = q;
return true;
}
}
bool erase(int i) {//第i个后面插入x,i从1开始 if (i == ) {
mlist*q = next; next = next->next;
delete q;
}
else {
mlist *p = next, *q;
if ((p = setpos(i - )) == NULL) {//第i个
cout << "illegal deletion" << endl;
return false;
}
q = p->next;
p->next = p->next->next;
delete (q);
return true;
}
}
int size() {
int cnt = ;
mlist* p = next;
while (p != NULL) {
p = p->next;
cnt++;
}
return cnt;
}
void reverse() {
int n = size();
int t = n;
for(int i=;i<=n;i++) {
int x = setpos(n)->d;
erase(n);
insert(i-, x); } }
};
mlist init() {
mlist x;
x.d = H;
x.next = x.prior = NULL;
return x;
}
void homework1() {
ifstream fin("1.txt");
int n; fin >> n;
for (int i = ; i <= n; i++) { int x; fin >> x; l.push_back(x); }
auto e = l.end();
for (auto t = l.begin(); t != e; t++) {
if (*t < )l.push_front(*t);
else l.push_back(*t);
t = l.erase(t);
}
for (auto t : l) { cout << t << ' '; }
}
mlist head = init();
void print(mlist head) {
mlist *p = &head;
while (p != NULL) cout << p->d << ' ', p = p->next;
cout << endl;
}
int main() { int n;
cin >> n;
for (int i = ; i <= n; i++)head.pb(i);
print(head);
head.reverse();
print(head);
//cout << head.size();
cin >> n;
}
/*p->prior->next = p->next;
p->next->prior = p->prioir;
free(p);*/ /*template<class T> class Link {//const
public:
T data;
Link<T> *next;
Link(const T info, const Link<T>*nextValue = NULL) {
data = info;
next = nextValue;
}
Link(const Link<T>*nextValue) {
next = nextValue;
}
};
template<class T> class InkList :public List<T> {
private:
Link<T> *head, *tail;
Link<T> *setPos(const int p);
public:
~InkList(int s);
//ADT
bool isEmpty();
void clear();
int length();
bool append(const T value);
bool insert(const int p, const T value);
bool delete1(const int p);
bool getValue(const int p, T& value);
bool getPos(int &p, const T value);
};
//第i个的指针
template<class T>
Link<T> *InkList<T>::setPos(int i) {
int count = 0;
if (i == -1)
return head;
link<T>*p = head->next;
while (p != NULL&&count < i) {
p = p->next;
count++;
};
return p;
}
//insert tail??new??
template<class T>
bool InkList<T>::insert(const int i, const T value) {
Link<T> *p*q; if ((p = setPos(i - 1)) == NULL) {
cout << "illegal insertion" << endl;
return false;
}
q = new Link<T>(value, p->next);
p->next = q;
if (p == tail)
tail = q;
return true;
}
//delete
template<class T>
bool InkList<T>::delete1(const int i) {//delete 内置函数
Link<T>*q, *p;
if ((p = setPos(i - 1)) == NULL || p == tail) {
cout << "illegal deletion" << endl;
return false;
}
q = p->next;
if (q == tail) {
tail = p;
p->next = NULL;
}
else p->next = q->next;
delete q;
return true;
}
/*p = head;//delete by x;
while (p->next != NULL&&p->next->info != x) p = p->next;
q = p->next;
p->next = q->next;
free(q);*/
DS作业·写了一个链表的更多相关文章
- 一步一步教你从零开始写C语言链表---构建一个链表
版权声明:本文为博主原创文章,如有需要,请注明转载地址:http://blog.csdn.net/morixinguan.若是侵权用于商业用途,请联系博主,否则将追究责任 https://blog ...
- 远程调用与编译DS作业
1.编译服务器上的ds作业 dscc /d 服务器地址:端口 /u 用户名 /p 密码 工程名称 /J 作业名称 解释: 作业名称:直接写作业名称即可,不用.pjb 2.执行服务器上的ds作业 dsj ...
- 我写的一个ExcelHelper通用类,可用于读取或生成数据
读取或生成EXCEL数据的方法有很多,一般常见的有: 1.通过OFFICE EXCEL组件,优点:读取与生成EXCEL文件方便,缺点:服务器上必须安装OFFICE软件,且进程无法及时释放 2.通过第三 ...
- c语言实现一个链表
一.基础研究 我们在这里要理解和实现一种最基本的数据结构:链表.首先看看实现的程序代码: List .h: 事实上我们观察list.h发现前面一部分是数据结构的定义和函数的声明,后面一部分是函数的实现 ...
- 网易云课堂_C++程序设计入门(上)_第1单元:C++概览_第1单元作业 - 写代码 - 互评 (难度:易)
第1单元作业 - 写代码 - 互评 (难度:易) 查看帮助 返回 提交作业(截止时间已过) 完成并提交作业 作业批改 互评训练 互评作业 自评作业 成绩公布 查看成绩 温 ...
- 用jQuery写了一个模态框插件
用jQuery写了一个模态框插件 大家觉得下面的框框好看么, 水印可以去掉(这个任务交给你们了(- o -)~zZ); "info"框 $("div").con ...
- 1.使用C++封装一个链表类LinkList
使用C++封装一个链表类LinkList.写出相应一个测试用例 链表需要提供 添加 修改删除 除重 合并 排序创建 销毁等接口. 不能调用库函数或者使用STL等类库 题目延伸********** ...
- 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。
一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...
- 自己制作一个链表用来存储列表信息,并查找当前id信息,找上一条信息,下一条信息(信息浏览的时候方便使用)
偶然看到某些网站在新闻详情中 ,往往是需要根据当前信息id获取到上一条信息和下一条信息的,而通常我们的做法是先获取当前信息,再获取上一条信息,再获取下一条信息,就需要发送三次查询才能够得到这些信息,一 ...
随机推荐
- Java实现快速批量移动文件
文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现.但是在Java文件的编程实现中,大多是通过复制文件到目的地,再删除所有文件来实现的.这对于小文件来说看不 ...
- Linux Eclipse 运行Protobuf
安装环境Ubuntu 14.04 64 bit 安装过程分为三步 1. Linux下安装Protobuf 2. Eclipse下安装protobuf.dt插件 3. Eclipse下配置动态链接库并运 ...
- beautifulsoup4 安装教程
下载beautifulsoup, 下载地址:https://www.crummy.com/software/BeautifulSoup/bs4/download/ 下载完成之后,解压到一个文件夹,用c ...
- 【GIS】ArcGIS Server密码
1.C:\Program Files\ArcGIS\Server\tools\passwordreset 2.PasswordReset -l 列出管理站点的管理员用户的名称 3.PasswordRe ...
- linux-满足多字符条件统计行数
测试数据: 2017-10-24 14:14:11:1123 [ INFO] order_type=add,order_id=9150882564978710367790292017-10-24 14 ...
- Sharepoint文档的CAML分页及相关筛选记录
写这篇文章的初衷是因为其他的业务系统要调用sharepoint的文档库信息,使其他的系统也可以获取sharepoint文档库的信息列表.在这个过程中尝试过用linq to sharepoint来获取文 ...
- Android对touch事件的拦截,在View Tree上的传递顺序
当发生touch事件时,系统会产生一个MotionEvent并且沿着View Tree开始传递.首先获取MotionEvent是View Tree的根节点,根节点通常是一个ViewGroup,View ...
- 【python问题】UnicodeEncodeError: 'ascii' codec can't encode characters in position 306-309: ordinal not in range(128)
今天在写python爬虫的时候,遇到一个问题 UnicodeEncodeError: 'ascii' codec can't encode characters in position 306-309 ...
- 【大数据系列】MapReduce示例一年之内的最高气温
一.项目采用maven构建,如下为pom.xml中引入的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...
- jQuery缓存机制(一)
1.首先看一下涉及到jQuery缓存机制的代码结构: // 定义一些jQuery内部的变量,方便后续使用 var data_user, data_priv, // 后续会被赋值为两个Data对象 rb ...