C语言 利用指针和内存分配函数malloc()和free()实现动态数组的定义、使用和释放。

求大神帮忙呀,C语言的实验,可是不懂呢,求大神指导指导!实验内容:利用指针和内存分配函数malloc()和free()实现动态数组的定义、使用和释放。参考程序如下:#in... 求大神帮忙呀,C语言的实验,可是不懂呢,求大神指导指导!

实验内容:

利用指针和内存分配函数malloc()和free()实现动态数组的定义、使用和释放。
参考程序如下:
#include <stdio.h>
void main()
{ int n,i,*p;
printf(“请输入定义数组的长度n为:");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int)); //为长度为n的整型数组分配内存空间
for(i=0;i<n;i++) //为数组各个元素赋值
p[i]=i*i;
for(i=0;i<n;i++) //输出数组各元素的值
printf("%d ",p[i]);
free(p); //释放数组分配的内存空间
}
展开
 我来答
修魔go
2014-06-25 · TA获得超过119个赞
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:112万
展开全部

这个是我以前写的,,没有注释,,包括数组的创建,排序,删除,插入,,,

其实还少一个保存数据文件和载入 也就是save();load();应该很好写的,,,

你可以参考一下相应的函数,,

 

这是代码:

 

#include <stdio.h>
#include <stdlib.h>
typedef struct p{ int a; p *next;}P;

P* create();
void show(P *h);
P* paixu(P *h);
P* insert(P *h);
P* search(P *h,int s);
P* dele(P *h);
void fre(P *h);

int main()
{

   P *head;
   head=create();
   show(head);
   head=paixu(head);
   show(head);
   head=dele(head);
   show(head);
   head=insert(head);
   show(head);
   puts("按任意键继续。。。。");
   getchar();
   fre(head);
   return 0;

}

P* create()
{
 int i;
 puts("请问你想创建几个数据的链表,请输入数字:");
 scanf("%d",&i);
 P *h,*e,*p;
 p=(P *)malloc(sizeof(P));
 h=p;
 e=p;
 int j=0;
 while(j<i)
 {
  printf("请输入第 %d 个数据 :\n",j+1);
  p=(P *)malloc(sizeof(P));
  scanf("%d",&p->a);
  e->next=p;
  e=p;
  j++;
 }
 e->next=NULL;
 return h;
}

void show(P *h)
{

 P *p;
 p=h->next;
 while(p!=NULL)
 { 
  printf("%-10d",p->a);
  p=p->next;
 }
 puts("");
}

P* paixu(P *h)  //从大往小排序
{
    
 P *p1,*p2,*p3,*p;
    int flag=0;  //标志 0的是说明排序还没完成 
 while(flag!=1)
 {
           p1=h;
           p2=p1->next;
        p3=p2->next;
        while(p3!=NULL)
     {
       if((p2->a)<(p3->a))
    {
       p=p2;
       p2=p3;
       p3=p;

   p1->next=p2;
   p=p2->next;
   p2->next=p3;
   p3->next=p;
    }
        
      p1=p2;
       p2=p3;
      p3=p3->next;
     }
          p1=h;
    p2=p1->next;
      while(1)
   { 
          p1=p2;
    p2=p2->next;
    if((p1->a)<(p2->a))
    {flag=0;break;}
    if(p2->next==NULL)
    { flag=1; break;}
   }
 }
 return h;
}


P* insert(P *h)
{

    int i;
 puts("请输入你想插入的数:");
 scanf("%d",&i);
 P *in=(P *)malloc(sizeof(P));
 in->a=i;
 P *p1,*p2;
 p1=h;
 p2=p1->next;
 while(p2!=NULL)
 {
  if((in->a)>(p2->a))
        {
   p1->next=in;
   in->next=p2;
   break;
  }
  p1=p2;
  p2=p2->next;
 }
 if(p2=NULL)
 {
            p1->next=in;
   in->next=NULL;
 }
 return h;
}

P* search(P *h,int d)
{
 P *p;
 p=h->next;
 while(p!=NULL)
 {
       if((p->a)==d)  break;
    else
            p=p->next;
 }

 return p;
}


P* dele(P *h)
{
    int d;
 puts("请输入你想删除的数:");
 scanf("%d",&d);
    P *p1,*p2;
    p2=search(h,d);
    p1=h;
 while(p1->next!=p2)
 {
  p1=p1->next;
 }
    p1->next=p2->next;
 free(p2);
 return h;
}

void fre(P *h)
{
 P *p1=h,*p2=h->next;
 while(p2!=NULL)
 {
  free(p1);
  p1=p2;
  p2=p2->next;
 }
}

 

 

 这是我调试运行的结果,,

dzmcobk
2014-06-25 · TA获得超过748个赞
知道小有建树答主
回答量:431
采纳率:76%
帮助的人:124万
展开全部
#include<stdio.h>
#include<malloc.h>    //有的编译器不识别malloc,要是不识别加上这个头文件 
struct student        //定义学生类结构体
{
    char name[20];    //姓名
    int score;        //成绩
    int  rank;        //名次
};
void main()
{
    int n = 0;        //人数
     do{
        scanf("%d",&n);
        if(n>=0&&n<=100)
            break;
        else                  
            printf("输入人数有误");
    }while(1);         //防输错,若输入有错,会一直重新输入
    struct student * st = (struct student *)malloc( 
                                n * sizeof(struct student)                                     );        //开辟空间
    int i,j,t;
    printf("请按顺序输入学生姓名和成绩:\n");
    for(i=0;i<n;i++)
    {
        scanf("%s %d",st[i].name,&st[i].score);
    }
    for(i=0;i<n-1;i++)        //排序  
        for(j=0;j<n-i-1;j++)
            if(st[j].score<st[j+1].score)                   
            {
                t=st[j].score;
                st[j].score=st[j+1].score;
                st[j+1].score=t;
            }
    for(i = 0;i < n;i ++)  //排名次
    {
        if(i = 0)
            st[i].rank = 1;        //第一名
        else if(st[i].score = st[i-1].score)
            st[i].rank = st[i-1].rank;        //并列名次设定   
        else
            st[i].rank = i+1; 
     }  
    printf("名次\t\t姓名\t\t成绩\n"); //输出         
    for(i=0;i<n;i++)
        printf("%d\t\t%s\t\t%d\n",st[i].rank,st[i].name,st[i].score);
    free(st);        //亲,不要忘了释放空间哦~~
}

 这个是我之前帮别人写的简单的成绩排名,使用了malloc和free来定义和释放一个结构体数组, 希望可以帮到你,注释都加上了,应该很好理解的~~~请采纳哦亲~~~

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chao1575639478
2014-06-25 · TA获得超过1391个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:222万
展开全部
这个程序应该就可以吧..改一下变量基本就符合要求呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式