数据结构C语言>基本链表>使用malloc()函数分配一块浮点数内存
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float *fp; /* 浮点指标宣告 */
fp = (float *) malloc(sizeof(float)); /* 配置浮点数记忆体 */
if ( !fp ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
*fp = 3.1415926; /* 设定变数值 */
printf("圆周率: %10.8f \n",*fp); /* 列出结果 */
system("PAUSE");
return 0;
}
#include <stdlib.h>
int main(int argc, char *argv[])
{
float *fp; /* 浮点指标宣告 */
fp = (float *) malloc(sizeof(float)); /* 配置浮点数记忆体 */
if ( !fp ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
*fp = 3.1415926; /* 设定变数值 */
printf("圆周率: %10.8f \n",*fp); /* 列出结果 */
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>使用内存动态分配重写程序
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_1_1b.c */
/* 计算英文平均成绩(动态记忆体配置) */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *score; /* 整数指标宣告 */
int i;
int num; /* 学生人数 */
int sum; /* 成绩总分变数 */
float ave; /* 平均成绩变数 */
sum = 0; /* 设定总分初值 */
printf("请输入学生人数 ==> ");
scanf("%d",&num); /* 读取学生人数 */
/* 配置成绩阵列的记忆体 */
score = (int *) malloc(num * sizeof(int));
if ( !score ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
for ( i = 0; i < num; i++ )
{
printf("请输入英语成绩. ==> ");
scanf("%d",&score[i]); /* 读取英文成绩 */
sum += *(score + i); /* 计算总分 */
}
ave = (float) sum / (float) num; /* 计算平均 */
printf("平均成绩: %6.2f \n",ave);
system("PAUSE");
return 0;
}
/* 程式实例: 3_1_1b.c */
/* 计算英文平均成绩(动态记忆体配置) */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int *score; /* 整数指标宣告 */
int i;
int num; /* 学生人数 */
int sum; /* 成绩总分变数 */
float ave; /* 平均成绩变数 */
sum = 0; /* 设定总分初值 */
printf("请输入学生人数 ==> ");
scanf("%d",&num); /* 读取学生人数 */
/* 配置成绩阵列的记忆体 */
score = (int *) malloc(num * sizeof(int));
if ( !score ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
for ( i = 0; i < num; i++ )
{
printf("请输入英语成绩. ==> ");
scanf("%d",&score[i]); /* 读取英文成绩 */
sum += *(score + i); /* 计算总分 */
}
ave = (float) sum / (float) num; /* 计算平均 */
printf("平均成绩: %6.2f \n",ave);
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>使用内存动态分配重写程序2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_1_1c.c */
/* 计算英文平均成绩(动态记忆体配置) */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
struct grade /* 成绩结构宣告 */
{
int math; /* 数学成绩 */
int english; /* 英文成绩 */
int computer; /* 电脑成绩 */
};
struct grade *student; /* 结构阵列变数宣告 */
int i;
int num; /* 学生人数 */
int m_sum,e_sum,c_sum; /* 各科成绩总分变数 */
float m_ave,e_ave,c_ave; /* 各科平均成绩变数 */
m_sum = e_sum = c_sum = 0; /* 总分初值 */
printf("请输入学生人数 ==> ");
scanf("%d",&num); /* 读取学生人数 */
student = (struct grade *) /* 配置记忆体 */
malloc(num * sizeof(struct grade));
if ( !student ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
for ( i = 0; i < num; i++ )
{
printf("学生编号: %d\n",i + 1);
printf("请输入数学成绩. ==> ");
scanf("%d",&student[i].math); /* 读取数学成绩 */
m_sum += student[i].math; /* 计算数学总分 */
printf("请输入英语成绩. ==> ");
scanf("%d",&student[i].english); /* 读取英文成绩 */
e_sum += student[i].english; /* 计算英文总分 */
printf("请输入计算机成绩. ==> ");
scanf("%d",&student[i].computer); /* 读取电脑成绩 */
c_sum += student[i].computer; /* 计算电脑总分 */
}
m_ave = (float) m_sum / (float) num; /* 计算数学平均 */
e_ave = (float) e_sum / (float) num; /* 计算英文平均 */
c_ave = (float) c_sum / (float) num; /* 计算电脑平均 */
printf("数学平均成绩: %6.2f \n",m_ave);
printf("英语平均成绩: %6.2f \n",e_ave);
printf("计算机平均成绩: %6.2f \n",c_ave);
system("PAUSE");
return 0;
}
/* 程式实例: 3_1_1c.c */
/* 计算英文平均成绩(动态记忆体配置) */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
struct grade /* 成绩结构宣告 */
{
int math; /* 数学成绩 */
int english; /* 英文成绩 */
int computer; /* 电脑成绩 */
};
struct grade *student; /* 结构阵列变数宣告 */
int i;
int num; /* 学生人数 */
int m_sum,e_sum,c_sum; /* 各科成绩总分变数 */
float m_ave,e_ave,c_ave; /* 各科平均成绩变数 */
m_sum = e_sum = c_sum = 0; /* 总分初值 */
printf("请输入学生人数 ==> ");
scanf("%d",&num); /* 读取学生人数 */
student = (struct grade *) /* 配置记忆体 */
malloc(num * sizeof(struct grade));
if ( !student ) /* 检查指标 */
{
printf("内存分配失败! \n");
exit(1);
}
for ( i = 0; i < num; i++ )
{
printf("学生编号: %d\n",i + 1);
printf("请输入数学成绩. ==> ");
scanf("%d",&student[i].math); /* 读取数学成绩 */
m_sum += student[i].math; /* 计算数学总分 */
printf("请输入英语成绩. ==> ");
scanf("%d",&student[i].english); /* 读取英文成绩 */
e_sum += student[i].english; /* 计算英文总分 */
printf("请输入计算机成绩. ==> ");
scanf("%d",&student[i].computer); /* 读取电脑成绩 */
c_sum += student[i].computer; /* 计算电脑总分 */
}
m_ave = (float) m_sum / (float) num; /* 计算数学平均 */
e_ave = (float) e_sum / (float) num; /* 计算英文平均 */
c_ave = (float) c_sum / (float) num; /* 计算电脑平均 */
printf("数学平均成绩: %6.2f \n",m_ave);
printf("英语平均成绩: %6.2f \n",e_ave);
printf("计算机平均成绩: %6.2f \n",c_ave);
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>动态内存的分配和释放
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_1_2.c */
/* 浮点数内存分配和释放 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float *fp;
fp=(float *)malloc(sizeof(float));
if(!fp)
{
printf("内存分配失败! \n");
exit(1);
}
*fp=3.1415926;
printf("圆周率:%10.8f \n",*fp);
free(fp);
system("PAUSE");
return 0;
}
/* 程式实例: 3_1_2.c */
/* 浮点数内存分配和释放 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
float *fp;
fp=(float *)malloc(sizeof(float));
if(!fp)
{
printf("内存分配失败! \n");
exit(1);
}
*fp=3.1415926;
printf("圆周率:%10.8f \n",*fp);
free(fp);
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>链表的创建>动态数据结构的声明和内存分配
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_2_2.c */
/* 动态数据结构的声明和内存处理 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist //链表结构声明
{
int num; //邮寄编号
char name[50]; //邮寄姓名
char address[50]; //邮寄地址
struct llist *next; //指向下一标签
};
typedef struct llist node; //定向新类型
typedef node *llink; //定义新类型指针
int main(int argc, char *argv[])
{
llink ptr;
ptr=(llink)malloc(sizeof(node)); //分配内存
if(!ptr) //检查指针
{
printf("内存分配失败! \n");
exit(1);
}
printf("请输入编号==>");
scanf("%d",&ptr->num); //读取编号
printf("请输入姓名==>");
scanf("%s",&ptr->name); //读取姓名
printf("请输入地址==>");
scanf("%s",&ptr->address); //读取地址
ptr->next=NULL; //设置指针初始值
printf("邮寄数据:\n"); //输出数据项
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
printf(" 地址:%s\n",ptr->address);
system("PAUSE");
return 0;
}
/* 程式实例: 3_2_2.c */
/* 动态数据结构的声明和内存处理 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist //链表结构声明
{
int num; //邮寄编号
char name[50]; //邮寄姓名
char address[50]; //邮寄地址
struct llist *next; //指向下一标签
};
typedef struct llist node; //定向新类型
typedef node *llink; //定义新类型指针
int main(int argc, char *argv[])
{
llink ptr;
ptr=(llink)malloc(sizeof(node)); //分配内存
if(!ptr) //检查指针
{
printf("内存分配失败! \n");
exit(1);
}
printf("请输入编号==>");
scanf("%d",&ptr->num); //读取编号
printf("请输入姓名==>");
scanf("%s",&ptr->name); //读取姓名
printf("请输入地址==>");
scanf("%s",&ptr->address); //读取地址
ptr->next=NULL; //设置指针初始值
printf("邮寄数据:\n"); //输出数据项
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
printf(" 地址:%s\n",ptr->address);
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>链表的创建>使用链表将邮寄名单用动态数据结构存储,然后输出
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_2_3a.c */
/* 链表的创建 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist //链表结构声明
{
int num; //邮寄编号
char name[10]; //邮寄姓名
struct llist *next; //指向下一个标签
};
typedef struct llist node; //定义新类型
typedef node *llink; //定义新类型指针
int main(int argc, char *argv[])
{
llink head; //链表的开始指针
llink ptr;
int i;
head=(llink)malloc(sizeof(node)); //分配内存
if(!head) //检查指针
{
printf("内存分配失败!\n");
exit(1);
}
head->next=NULL; //设置指针初始值
ptr=head; //将ptr指向链表开始
printf("输入六项邮寄数据:\n");
for(i=0;i<6;i++) //创建其他结点循环
{
printf("请输入编号==> ");
scanf("%d",&ptr->num); //读取编号
printf("请输入编号(%d)的姓名==> ",ptr->num);
scanf("%s",&ptr->name);
ptr->next=(llink)malloc(sizeof(node));
if(!ptr->next)
{
printf("内存分配失败!\n");
exit(1);
}
ptr->next->next=NULL; //设置下个指针初始值
ptr=ptr->next; //指向下一结点
}
printf("邮寄数据:\n");
ptr=head;
for(i=0;i<6;i++)
{
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
ptr=ptr->next;
}
system("PAUSE");
return 0;
}
/* 程式实例: 3_2_3a.c */
/* 链表的创建 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist //链表结构声明
{
int num; //邮寄编号
char name[10]; //邮寄姓名
struct llist *next; //指向下一个标签
};
typedef struct llist node; //定义新类型
typedef node *llink; //定义新类型指针
int main(int argc, char *argv[])
{
llink head; //链表的开始指针
llink ptr;
int i;
head=(llink)malloc(sizeof(node)); //分配内存
if(!head) //检查指针
{
printf("内存分配失败!\n");
exit(1);
}
head->next=NULL; //设置指针初始值
ptr=head; //将ptr指向链表开始
printf("输入六项邮寄数据:\n");
for(i=0;i<6;i++) //创建其他结点循环
{
printf("请输入编号==> ");
scanf("%d",&ptr->num); //读取编号
printf("请输入编号(%d)的姓名==> ",ptr->num);
scanf("%s",&ptr->name);
ptr->next=(llink)malloc(sizeof(node));
if(!ptr->next)
{
printf("内存分配失败!\n");
exit(1);
}
ptr->next->next=NULL; //设置下个指针初始值
ptr=ptr->next; //指向下一结点
}
printf("邮寄数据:\n");
ptr=head;
for(i=0;i<6;i++)
{
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
ptr=ptr->next;
}
system("PAUSE");
return 0;
}
数据结构C语言>基本链表>链表的创建>使用链表将邮寄名单用动态数据结构存储,然后输出
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
/* ======================================== */
/* 程式实例: 3_2_3b.c */
/* 链表的创建 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist
{
int num;
char name[10];
struct llist *next;
};
typedef struct llist node;
typedef node *llink;
int main(int argc, char *argv[])
{
llink head; //链表的开始指针
llink ptr,ptr1;
int i;
//创建第一结点
head=(llink)malloc(sizeof(node));
if(!head)//检查内存分配
{
printf("内存分配失败!\n");
exit(1);
}
printf("输入六项邮寄数据:\n");
printf("请输入编号==> ");
scanf("%d",&head->num);//读取编号
printf("请输入编号(%d)的姓名 ==> ",ptr->num);
scanf("%s",head->name);//读取姓名
head->next=NULL;//设置指针初值
ptr=head;//将ptr指向链表开始
for(i=1;i<6;i++)
{
ptr1=(llink)malloc(sizeof(node));
if(!ptr1)
{
printf("内存分配失败!\n");
exit(1);
}
printf("请输入编号==> ");
scanf("%d",&head->num);//读取编号
printf("请输入编号(%d)的姓名 ==> ",ptr->num);
scanf("%s",ptr1->name);//读取姓名
ptr1->next=NULL;//设置指针初值
ptr->next=ptr1;//连接结点
ptr=ptr->next;//指向下一结点
}
printf("邮寄资料:\n");
ptr=head;
for(i=0;i<6;i++)
{
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
ptr=ptr->next;
}
system("PAUSE");
return 0;
}
/* 程式实例: 3_2_3b.c */
/* 链表的创建 */
/* ======================================== */
#include <stdio.h>
#include <stdlib.h>
struct llist
{
int num;
char name[10];
struct llist *next;
};
typedef struct llist node;
typedef node *llink;
int main(int argc, char *argv[])
{
llink head; //链表的开始指针
llink ptr,ptr1;
int i;
//创建第一结点
head=(llink)malloc(sizeof(node));
if(!head)//检查内存分配
{
printf("内存分配失败!\n");
exit(1);
}
printf("输入六项邮寄数据:\n");
printf("请输入编号==> ");
scanf("%d",&head->num);//读取编号
printf("请输入编号(%d)的姓名 ==> ",ptr->num);
scanf("%s",head->name);//读取姓名
head->next=NULL;//设置指针初值
ptr=head;//将ptr指向链表开始
for(i=1;i<6;i++)
{
ptr1=(llink)malloc(sizeof(node));
if(!ptr1)
{
printf("内存分配失败!\n");
exit(1);
}
printf("请输入编号==> ");
scanf("%d",&head->num);//读取编号
printf("请输入编号(%d)的姓名 ==> ",ptr->num);
scanf("%s",ptr1->name);//读取姓名
ptr1->next=NULL;//设置指针初值
ptr->next=ptr1;//连接结点
ptr=ptr->next;//指向下一结点
}
printf("邮寄资料:\n");
ptr=head;
for(i=0;i<6;i++)
{
printf("编号:%d\n",ptr->num);
printf(" 姓名:%s\n",ptr->name);
ptr=ptr->next;
}
system("PAUSE");
return 0;
}
我终于知道一生二,二生三,三生万物的道理了。三个指针,head指针用来第一空间,ptr11指针用来开辟新空间,part指针用来生成第一空间与第二空间的连接。连接好后,part1当然用于开辟第三空间,part指针又去生成第二空间与第三空间的连接。依次类推。
具体过程如图:
看这段代码时,不用脑子生成图像会糊涂。就算你脑子生成了图像,脑子里图像的持久性是个问题,以及过多图像都要明确分辨也是个问题。这是在挑战大脑的记忆。所以把它画出来,保存在除大脑外的其它地方是不错的选择。
还有个问题,你把它画出来了。但图像是静止。这段代码表达了一个过程。用什么来描述过程比较好呢?动画。
由此可知,文字可以描述过程,但对于大脑不自然。动画可能更自然些。
需要发明一个用动画来编写程序,更能解放大脑的创造力,也就是绽放你的思想。CC语言一贯强调。