嘿嘿,这是个perfect想法,目前的计算机是不太可能实现的。
理由一:在我们进行数据结构设计时,都脱离不开实际的需求,然而现实中的需求往往都是有侧重的。链表擅长插入删除,顺序表擅长随机访问,我们都要取其优点减少其缺点的。(目前的实际情况)
理由二:如果真存在这样的数据结构,那么你用什么方式存储他呢?是链式还是顺序呢?我们的计算机是存储程序式的计算机,内存是单元模式的,就像排队一样,你要对一系列的数据进行处理,要么让他们连续存(数组),要么让他分散开来(链表)是一个矛盾的两个方面。
小结:从内存角度分析,数组和链表是矛和盾不能兼容的,你理解我的意思了吗?
昨天闲着没事写了个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();
}/
void del_max(linklist L)
{
linklist p=L,r=L,s=L;//记录最大节点的前驱节点
while(!p->next)
{
r=p;//当前检测节点的前驱节点
p=p->next;//当前与最大值比较的节点比较
if(p->data>s->next->data)//若当前节点比最大节点大
s=r;//最大节点的前驱为当前节点前驱
}
s->next=s->next->next;//删除最大节点
}
数据结构是电脑里数据的组织方式,或者说存储方式,是一种什么结构来存取数据,例如典型的堆栈结构stack,队列结构queue,链表结构list等,堆栈是后进先出Last
In
First
Out
(LIFO),队列结构是First
In
First
Out(FIFO),链表是任意位置插入新数据之类的,简单来说就是找一种方式方便你存取你的数据。
数据库是一个数据集合,顾名思义,库就是一个存储地方嘛,即存放大量数据的地方,而往数据库里放数据或者访问数据库里的数据的方式就是数据结构的内容了。
数据库相当于一个容器,数据结构相当于你往容器里放东西的方式和取东西的方式,如果没有数据结构,那么容器里的东西(数据)就会杂乱无章,以后取出来也麻烦。
以上就是关于算法工程师请进--有结合数组与链表优点的数据结构吗全部的内容,包括:算法工程师请进--有结合数组与链表优点的数据结构吗、数据库作业: 输入一组整数,建立带头结点的单链表,并实现线性表的求长度、插入和删除等 *** 作。、数据库结构:已知一个带头结点的单链表L,试编写一个算法删除L中值最大的结点。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)