当前位置:首页 » 存储配置 » list的存储结构体

list的存储结构体

发布时间: 2022-11-05 02:59:20

㈠ C语言中怎样用链表保存结构体数据(动态数据结构)

链表有多种形式,如:单向链表,双向链表,单向循环链表,双向循环链表。将链表结构定义为list_t,则该类型中一定(至少)存在一个指向下一节点的指针list_t
*next;除了这个指针,list_t
中可以包含其它类型的数据,包括结构体变量。比如:typedef
struct
{
struct
usr_struct
data;
list_t
*next;
}
list_t;

㈡ STL的list容器如何对结构体进行排序

链表list有自定义的sort排序函数,默认由大到小排序,但是只有能够比较大小的数值类型的内容才可以,如int,float,double等,对于结构体需要自己定义排序函数。
例如:
定义结构体:
typedef
struct
NewTreeElem
{
long
nNodeId;
//节点id
int
nLevel;
//层次
double
dSoIn;
//社会影响
};
定义全局比较函数,注意必须是全局函数:
////比较
boolCompInfo(NewTreeElem
first,
NewTreeElem
second)
{
if(first.dSoIn
<=
second.dSoIn)
//由大到小排序
//如果想要由小到大,改为大于即可
{
return
false;
}
else
{
return
true;
}
}
定义链表:
list<NewTreeElem>
listSocialInf
链表排序:
//对邻居按照社会影响由大到小排序
listSocialInf.sort(CompInfo);

㈢ 给出单链表结构体的定义,分别定义结点和链表的结构体

我推荐使用类来定义结构和方法,毕竟这是基础类,需要使用模板和强大的封装性

program with c++

//这是链表结构的定义
#ifndefARRAYLIST_H
#defineARRAYLIST_H
#include"arrayListNode.h"

template<classT>
classarrayList
{
public:
arrayList();
virtual~arrayList();
//添加元素方法
voidadd(Tdata);
//移除某个元素
voidremove(inti);
//获取迭代器指向的值,为迭代提高效率
TgetNext();
//获取第一个元素
TgetFirst();
//获取最后一个元素
TgetEnd();
//清空
voidflush();
//获取长度
intgetSize();
private:
//这是链表的头
arrayListNode<T>*head;
//这是链表的长度
intsize;
//这是一个迭代器,用来指向当前操作的链表元素,用于GETNEXT之类的函数
arrayListNode<T>*nowSelect;
};

#endif//ARRAYLIST_H

下面是链表元素的结构

//链表元素,最理想的存储是用指针存储T类型数据以应对用户类型的存储,但是这很不直观,这里只给出能存储标准类型的非指针存储,也可以存储结构体
#ifndefARRAYLISTNODE_H
#defineARRAYLISTNODE_H

template<classT>
classarrayListNode
{
public:
arrayListNode();
virtual~arrayListNode();
//设置下一个指针值,这个函数给arraylist用
voidsetNext(arrayListNode*inNext);
//设置元素
voidsetData(Tindata);
//获取元素
TgetData();
private:
//元素值
Tdata;
//指向下一个元素的指针
arrayListNode<T>*next;
};

#endif//ARRAYLISTNODE_H

下面根据问主的需求写出C能用的结构体链表结构

template<classT>
structlistNode{
Tdata;
listNode<T>*next;
};

template<classT>
structarrayList{
listNode<T>*head;
intsize;
listNode<T>*nowSelect;
};

我以前写的arrayList ,stack等C++ util随着时间流逝已经找不到了,不然可以分享给问主了。

㈣ STL的list容器如何对结构体进行排序

链表list有自定义的sort排序函数,默认由大到小排序,但是只有能够比较大小的数值类型的内容才可以,如int,float,double等,对于结构体需要自己定义排序函数。
例如:
定义结构体:
typedef struct NewTreeElem
{
long nNodeId; //节点id
int nLevel; //层次
double dSoIn; //社会影响
};
定义全局比较函数,注意必须是全局函数:
////比较
boolCompInfo(NewTreeElem first, NewTreeElem second)
{
if(first.dSoIn <= second.dSoIn) //由大到小排序 //如果想要由小到大,改为大于即可
{
return false;
}
else
{
return true;
}
}
定义链表:
list<NewTreeElem> listSocialInf
链表排序:
//对邻居按照社会影响由大到小排序
listSocialInf.sort(CompInfo);

㈤ C# 结构体成员 list

因为 cc=bb这一句,cc 和 bb 虽然都是结构体,但这个结构体里面有 List,List并没有重新实例化,所以 cc 和 bb 里面的 List 其实是同一个。

㈥ c++ list读取csv文件,并将每列数据保存到结构体中

[cpp] view plain
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>

using namespace std;
//删除字符串中空格,制表符tab等无效字符
string Trim(string& str)
{
//str.find_first_not_of(" \t\r\n"),在字符串str中从索引0开始,返回首次不匹配"\t\r\n"的位置
str.erase(0,str.find_first_not_of(" \t\r\n"));
str.erase(str.find_last_not_of(" \t\r\n") + 1);
return str;
}

int main()
{
ifstream fin("test1.csv"); //打开文件流操作
string line;
while (getline(fin, line)) //整行读取,换行符“\n”区分,遇到文件尾标志eof终止读取
{
cout <<"原始字符串:"<< line << endl; //整行输出
istringstream sin(line); //将整行字符串line读入到字符串流istringstream中
vector<string> fields; //声明一个字符串向量
string field;
while (getline(sin, field, ',')) //将字符串流sin中的字符读入到field字符串中,以逗号为分隔符
{
fields.push_back(field); //将刚刚读取的字符串添加到向量fields中
}
string name = Trim(fields[0]); //清除掉向量fields中第一个元素的无效字符,并赋值给变量name
string age = Trim(fields[1]); //清除掉向量fields中第二个元素的无效字符,并赋值给变量age
string birthday = Trim(fields[2]); //清除掉向量fields中第三个元素的无效字符,并赋值给变量birthday
cout <<"处理之后的字符串:"<< name << "\t" << age << "\t" << birthday << endl;
}
return EXIT_SUCCESS;

㈦ C语言中怎样用链表保存结构体数据(动态数据结构)

单向链表很简单的,你这几这么就可以了:
struct client{
char account[14]; //账号
char name[10]; //名字
char identity[20]; //身份证号
char address[15]; //地址
long int money; //存款(可存可取)
client* pNext; //指向下一个节点,如果是最后一个节点则为NULL
};

然后,程序里只需要保存第一个节点就行了:
client* head = (client*)malloc(sizeof(client)); //第一个节点这么产生
head->pNext = NULL; //该表只有一个节点,所以第一个也是最后一个,别忘记赋0

插入的时候从头部插入就行了
client* p = (client*)malloc(sizeof(client));
p->pNext = head;
head = p; //将原来的头付给p的pNext指针,然后原来保存头元素的指针用p取代。

遍历链表更加容易了
client* pNode = head;
while (pNode)
{
printf(pNode->account); //比如打印所有客户的帐号
pNode = pNode->pNext; //让pNode指向下一个节点
//如果该节点是最后一个节点,那么pNode就会变成NULL,因为最后一个节点的pNext指针是NULL,while循环就会因为pNode为0而结束
}

保存进文件的时候相当于遍历一边所有的元素,读取的时候则一个一个读取,然后重新插入链表。最后,提醒一下的是别忘记用free释放由malloc分配的内存。

另外,考虑使用C++,可以更好的管理内存,思路也会更清晰。而且,如果是为了应用,根本不需要自己开发链表类,用STL就可以了,STL不仅提供双向链表,还有Map,HashMap等数据结构,非常适合特别大的数据量保存和查找,链表的查找很慢的,找一个数据相当于要把链表全部过一遍。

㈧ C语言怎么存链表形式的结构体文件

看你的代码是每次写入一个节点到文件,但是fwrite(p,sizeof(struct room),NUM,fp);这句是每次写入NUM大小的一个room数组,把NUM改成1:
fwrite(p,sizeof(struct room),1,fp); //每次写入一个节点

㈨ redis的list可以存放结构体吗

当然可以有结构体,而且像你这样用当然不行find(start,stop,target)是从start到stop寻找数据是target的那个iterator,而你这里呢,List_d.begin()的reference_type是structdd,所以你也只能找structdd型的东西(当然你也必须有structdd的operator==),而你给的第三个参数是个int,这当然没戏。

热点内容
求阶乘的c语言 发布:2025-05-19 21:15:20 浏览:964
话唠安卓哪里下载 发布:2025-05-19 20:27:04 浏览:165
疯狂android讲义光盘 发布:2025-05-19 20:12:31 浏览:153
安卓手机怎么下载圈点 发布:2025-05-19 20:08:11 浏览:473
文件夹粉碎不了 发布:2025-05-19 20:05:41 浏览:249
安卓怎么把软件放进全局 发布:2025-05-19 20:03:55 浏览:688
安卓手机如何看最真实的型号 发布:2025-05-19 19:58:59 浏览:12
U盘超级加密2008 发布:2025-05-19 19:44:32 浏览:457
灯带编程软件 发布:2025-05-19 19:32:30 浏览:288
如何判断服务器被多少人访问 发布:2025-05-19 19:27:45 浏览:126