
昨天闲着没事写了个C++的约瑟夫环问题的解决。。
是带头结点的循环单链表。。只要改一两处地方就可以改成普通单链表。。
求长度、插入、删除 *** 作都有。。。
#include <iostream>
#include <vector>
#include <asserth>
using namespace std;
template <class T>
class LinkedList{
typedef struct LNode{
T value;
LNode next;
}LNode, pNode;
private:
pNode headNode;
int size;
public:
LinkedList(){
headNode = new LNode;
headNode->value = NULL;
headNode->next = headNode;
size = 0;
}
~LinkedList(){
}
void add(T &t){
pNode node = new LNode;
node->value = t;
node->next = headNode;
pNode tmp = headNode;
while(tmp->next != headNode){
tmp = tmp->next;
}
tmp->next = node;
size ++;
}
bool remove(T t){
pNode pre, node;
pre = headNode;
node = headNode->next;
while(node!=headNode){
if(node->value == t){
pre->next = node->next;
size --;
//T rt = node->value;
delete node;
return true;
}
pre = node;
node = node->next;
}
return false;
}
T get(int index){
//assert( index < size);
if(index >= size){
throw 1;
}
pNode node = headNode->next;
int i=0;
for(;i<index;i++){
node = node->next;
}
return node->value;
}
int getSize(){
return size;
}
void printList(){
cout <<"list size: " << size << ", elements: " << endl;
for(pNode p = headNode->next; p!=headNode; p=p->next){
cout << p->value << " ";
}
cout << endl;
}
void resefu(){
int n = 9, k = 6, m = 5;
pNode cur = headNode;
for(int i=0; i<k; i++){
cur = cur->next;
}
while(size > 0){
for(int i=1; i<m ; i++){
cur = cur->next;
if(cur == headNode){
i--;
}
}
T tmp = cur->value;
cur = cur->next;
cout << "-------------remove " << tmp << endl;
remove(tmp);
printList();
}
}
};
/
void main(){
LinkedList<int> list;
int n = 9, k = 1, m = 5;
for(int i=1; i<=n; i++){
listadd(i);
}
// listprintList();
listresefu();
}/
链表非常有用, 有用原因如下
1 插入删除的效率极高
2 插入删除节点不会导致其他节点发生改变(我指的是其他节点的内存地址)
数据结构那本上说到的每一种结构都非常有用, 链表那是最基本, 最常用, 最简单一种 也是面试比较喜欢出的题目
以上就是关于数据库作业: 输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等 *** 作。全部的内容,包括:数据库作业: 输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等 *** 作。、C语言链表很重要吗数据结构学完了,我们同学有自学数据库的,后来说链表没用啦!!比较迷茫了,求指教!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)