c语言存表
1. c语言保存链表问题!
fwrite(stup,sizeof(STUINFO),1,fp);
肯定会出错..stup是链表结构体类型. fwrite参数不对
链表节点定义.应该定义一个用来存储从文件读入数据的buf
写成
fwrite(stup.buf, 256, 1, fp);
2. C语言链表保存问题(高手请进!)
程序崩溃的问题,最好通过调试来定位。
(1)确定问题出在save()函数中
(2)确定出问题的代码范围
(3)检查变量的值。在你的代码中,最容易出问题的地方是指针p;也许你的链表在添加各个节点的时候有问题,导致p->next成为非法值;还有你要确保链表末尾节点的next指针为NULL。
3. 如何把一张表格存储用C语言在单片机里啊
呵呵 人家说的对的 就用数组 财富值没关系 我看能不能帮到你
int main()
{ int n[4][4]={0,0.1,0.2,0.3,1,11,12,13,2,10,9,12,3,12,14,16};
/*这就是把这个表格以数组形式给定义了*/
int m;
int find(int a,int b)/*定义根据a,b的值输出对应的m值的函数*/
{ scanf("d% d%",a,b);/*输入a,b的值,格式可能不对*/
int p1;
int p2;
int i;
int m1;
for(i=1;i<4;i++) /*找对应的的行值*/
{ if(n[0][i]==a)
p1=i;
}
for(i=1;i<4;i++)/*找对应的列值*/
{ if(n[i][0]==b)
p2=i;
}
m1=n[p1][p2]; /*根据行列值来定m的值*/
return m1;
}
m=find(int a,int b);/*调用这个函数*/
printf("d%",m);/*输出M*/
}
定义和格式没仔细检查,编译未必通过,但原理是这样的,自己改改吧
4. 利用c语言实现顺序存储线性表的插入!
有时会出现这种情况。他会以为是木马。
int GetElem();
int InstInsert();
typedef int ElemType;
typedef struct{
ElemType *elem; //存储空间基地址
int length; //当前长度
int listsize;//当前分配的存储容量
}SqList;
int InitList(SqList *L){
L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem)exit(-1);//存储空间分配失败
L->length=0; //空表长度为0
L->listsize=LIST_INIT_SIZE; //初始存储容量
printf("线性链表创建成功\n");
return OK;
}
int Input(SqList *L){
ElemType temp,*newbase;
printf("输入顺序列表的数据,以0为结束标志\n");
scanf("%d",&temp);
while(temp!=0){
if(L->length>=L->listsize){
newbase=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!newbase) exit(-1);//存储空间分配失败
L->elem=newbase; //空间新基地址
L->listsize+=LISTINCREMENT; //增加存储容量
}
L->elem[L->length++]=temp;
scanf("%d",&temp);
}
printf("输入数据结束!!\n");
return OK;
}
int Onput(SqList *L){
int i=0;
printf("输出线性表数据:");
while(i<L->length){
printf("%d\t",L->elem[i]);
i++;
}
printf("\n");
}
int ClearList(SqList *L){
L->length=0;
printf("清除成功!\n");
return OK;
}
void ListEmpty(SqList L){
if(L.elem!=NULL)
printf("true!\n");
else
printf("false!\n");
}
void ListLength(SqList L){
printf("线性表的长度是:%d\n",L.length);
return ;
}
int GetElem(SqList L,int i,SqList *e){
e=L.elem[i-1];
return e;
}
void PriorElem(SqList L,int cur_e,SqList *pre_e){
if(cur_e!=L.elem[0]){
pre_e=L.elem[0];
printf("前驱值为:%d\n",pre_e);
}
else
printf("pre_e无意义\n");
}
void NextElem(SqList L,int cur_e,SqList *next_e){
if(cur_e!=L.elem[L.length-1]){
next_e=L.elem[L.length-1];
printf("后继值为:%d\n",next_e);
}
else
printf("next_e无意义\n");
}
int ListInsert(SqList *L,int i,int e){
ElemType *newbase,*p,*q;
if(1>i||i>(L->length+1))
return -1;
if(L->length>=L->listsize){ //新增内存
newbase=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); //开辟新内存空间
if(!newbase)
exit(-1); //存储分配失败
L->elem=newbase; //新基地址
L->listsize+=LISTINCREMENT; //新增内存容量
}
q=&(L->elem[i-1]);
for(p=&(L->elem[L->length-1]);p>=q;p--){
*(p+1)=*p;
}
*q=e;
++L->length;
return OK;
}
int ListDelete(SqList *L,int i,int e){
ElemType *p,*q;
if(i<1||i>L->length)
return -1;
q=&(L->elem[i-1]);
e=L->elem[i-1];
p=L->elem+L->length-1;
for(;p>=q;q++)
*q=*(q+1);
--L->length;
printf("删除的值为:%d\n",e);
return OK;
}
5. C语言怎么存链表形式的结构体文件
看你的代码是每次写入一个节点到文件,但是fwrite(p,sizeof(struct room),NUM,fp);这句是每次写入NUM大小的一个room数组,把NUM改成1:
fwrite(p,sizeof(struct room),1,fp); //每次写入一个节点
6. C语言 链表保存
这个文件是为了用记事文本之类的工具打开以便于人们阅读还是为了保存二进制数据以便于程序读取?
w格式是写文件,即每次重新打开文件进行写操作都会覆盖该文件中之前已有的内容。
7. c语言,关于保存链表到文件和从文件装载链表(高手请进,急)
拿去用吧~
#include<stdio.h>
#include<malloc.h>
#include<string.h>
structaddress
{
inta;
intb;
charc;
address*next;
};
voidSaveToFile(structaddress*p,FILE*fp)
{
if(p!=NULL)
{
do
{
fwrite(p,sizeof(structaddress),1,fp);
p=p->next;
}
while(p!=NULL);
}
}
intload(FILE*fp,structaddress**head,int&n)//读取文件数据,建立链表
{
structaddress*p1,*p2;
*head=(structaddress*)malloc(sizeof(structaddress));
memset(*head,0,sizeof(structaddress));
if(fread(*head,sizeof(structaddress),1,fp)!=1)
{
free(*head);
*head=NULL;
return(0);
}
p2=*head;
n++;
while(!feof(fp))
{
p1=(structaddress*)malloc(sizeof(structaddress));
fread(p1,sizeof(structaddress),1,fp);
p2->next=p1;
p2=p1;
n++;
}
p2->next=NULL;
return(n);
}
voidmain()
{
structaddress*head;
intn=0;
structaddress*Test[10]={0};
inti=0;
FILE*fp=NULL;
for(;i<10;i++)
{
Test[i]=(structaddress*)malloc(sizeof(structaddress));
if(Test[i]!=NULL)
{
memset(Test[i],0,sizeof(structaddress));
//输入你的数据(a,b,c)
//如下
Test[i]->a=100+i;//不用则注释掉
}
}
for(i=0;i<10;i++)
{
if(i<10)
{
Test[i]->next=Test[i+1];//将结构指针连成链表
}
}
if((fp=fopen("addrbook","wb"))!=NULL)
{
SaveToFile(Test[0],fp);
fclose(fp);
}
if((fp=fopen("addrbook","rb"))!=NULL)
{
load(fp,&head,n);
}
}
8. 在C语言处理表格一类的问题 ,定义什么数据类型的变量保存表格数据
看你表格里面存的是什么数据了
如果不同列数据类型不同,那么最好的方式是结构体
然后每列有自己的成员变量,定义对应类型,整型,浮点型,字符串什么的
9. C语言中如何实现用文件保存一个动态的链表
随便说说
你可以
链表
的每一个结点,保存为一行.或者有一个特殊的符号来分割不同的结点,如果结点内有不同意义的数据,也可以用特殊的符号来分割,
这里要说明
因为c语言支持的只有流试文件
所以在文件存储链表的时候只能存储
单向链表
10. C语言 链表存储问题!!急
只将数据域的内容保存就行了,下次再打开这个文件取出数据域重新建表。
比如结点的数据结构如下:
struct node{
int data;
struct node *next;
}
那么其中的data就是数据域,只保存它的值就可以,next指针变量的值没有必要保存,因为程序每次分配的空间地址是不一样的。
下一次要重建链表时,只要用从文件提取的数据域值以data成员进行赋值就可以重现上次保存时的链表了。