版块1
#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>
#include <stdlib.h>
struct Arr
{
int * pBase;
int len;
int cnt;
int increament;
};
void init_arr (struct Arr * pArr, int length);
bool append_arr (struct Arr *pArr, int val);
bool insert_arr (struct Arr *pArr, int pos, int val);
bool delete_arr (struct Arr *pArr, int pos, int *pVal);
int get ();
bool is_empty (struct Arr * pArr);
bool is_full (struct Arr * pArr);
void sort_arr (struct Arr * pArr);
void show_arr (struct Arr * pArr);
void inversion_arr (struct Arr * pArr);
int main (void)
{
struct Arr arr;
int val;
init_arr (& arr, 6);
show_arr(& arr);
append_arr (& arr,1);
append_arr (&arr,10);
append_arr (& arr,-3);
append_arr (& arr,88);
if (delete_arr(&arr, 1, &val))
{
printf("删除成功!\ n");
printf("您删除的元素是:% d \ n", val);
}
else
{
printf ("删除失败!\ n");
}
show_arr (& arr);
inversion_arr (& arr);
printf ("倒置之后的数组内容是:\ n");
show_arr (& arr);
sort_arr(&arr);
printf("升序排序之后的数组内容是:\ n"); show_arr (& arr);
return 0;
}
void init_arr (struct Arr * pArr, int length)
{
(* pArr).len= 99;
pArr->pBase= (int *)malloc (sizeof(int)*length);
if (NULL == pArr->pBase)
{
printf("动态内存分配失败!\n");
exit (-1);
}
else
{
pArr->len= length;
pArr->cnt = 0;
}
return;
}
思路:
pArr->pBase[0]=1; cnt=1
pArr->pBase[1]=2; cnt=2
pArr->pBase[2]=3; cnt=3
pArr->pBase[cnt]=val;
++cnt;
C语言/数据结构——提供类库给他人使用
bool is_empty (struct Arr * pArr)
{
if (0= = pArr->cnt)
return true;
else
return false;
}
bool is_full (struct Arr * pArr)
{
if (pArr->cnt == pArr->len)
return true;
else
return false;
}
void show_arr(struct Arr * pArr)
{
int i;
if( is_empty(pArr) )
{
printf("数组为空!\n");
}
else
{
for( i=0; i<pArr->cnt; ++i )
{
printf("%d \n", pArr->pBase[i]);
}
}
}
bool append_arr(struct Arr *pArr, int val)
{
if(is_full(pArr))
return false;
else
pArr->pBase[pArr->cnt]=val;
(pArr->cnt) ++;
return true;
}
bool insert_arr(struct Arr *pArr, int pos, int val)
{
int i;
if(is_full(pArr))
return false;
if(pos<1 || pos>pArr->cnt+1)
return false;
for(i=pArr->cnt-1; i>=pos-1; --i)
{
pArr->pBase[i+1]=pArr->pBase[i];
}
pArr->pBase[pos-1]=val;
pArr->cnt ++;
return true;
}
bool delete_arr(struct Arr *pArr, int pos, int *pVal)
{
if(is_empty(pArr))
return false;
if(pos<1 || pos>pArr->cnt)
return false;
int i;
*pVal=pArr->pBase[pos-1];
for(i=pos; i<pArr->cnt; ++i)
{
pArr->pBase[i-1]=pArr->pBase[i];
}
(pArr->cnt)--;
return true;
}
void inversion_arr(struct Arr *pArr)
{
int i=0;
int j=pArr->cnt-1;
int t;
while(i<j){
t=pArr->pBase[i];
pArr->pBase[i]=pArr->pBase[j];
pArr->pBase[j]=t;
++i;
--j;
}
return;
}
void sort_arr(struct Arr *pArr)
{
int i,j;
int t;
for(i=0; i<pArr->cnt; ++i)
{
for(j=i+1; j<pArr->cnt; ++j)
{
if(pArr->pBase[i]>pArr->pBase[j])
{
t=pArr->pBase[i];
pArr->pBase[i]=pArr->pBase[j];
pArr->pBase[j]=t;
}
}
}
}
板块2
引例 :
# include <stdio.h>
int main()
{
int i=10;
i=f();
printf("i=%d\n", i);
return 0;
}
int f()
{
int j=20;
return j;
}
从上面的引例,我们给出一道例题如下:
以下程序中,能够通过调用函数fun,使main函数中的指针变量p指向一个合法的整型单元的是: C
A)main()
{
int *p;
fun(p);
...
}
int fun(int *p)
{
int s;
p=&s;
}
11这个就根本没有正确指向整型单元!!
B)main()
{
int *p;
fun(&p);
...
}
int fun(int **q)
{
int s;
*q=&s;
}
C)#include <stdio.h>
main()
{
int *p;
fun(&p);
...
}
int fun(int **q)
{
*q=(int *)malloc(4);
}
10跨函数使用内存的详解及示例— —通过动态来实现
实例:
A aa = new A(); <=> A *pa = (A *)malloc(sizeof(A))
# include <stdio.h>
# include <malloc.h>
struct Student
{
int sid;
int age;
};
struct Student * CreateStudent(void);
void ShpwStudent(struct Student *);
int main(void)
{
struct Student *ps;
ps=CreateStudent();
ShowStudent(ps);
return 0;
}
void ShowStudent (struct Student *pst)
{
printf("%d %d\n", pst->sid, pst->age);
}
struct Student * CreateStudent(void)
{
struct Student *p=(struct Student *)malloc(sizeof(struct Student));
p->sid=88;
p->age=99;
return p;
}
Arraylist和LinkList的区别?
板块3
# include <stdio.h>
# include <stdlib.h>
int main()
{
int a[5]={
4, 10, 2, 8, 6};
int len;
printf("请输入i需要分配的数组长度,len:");
scanf("%d", &len);
int * pArr=(int *)malloc(sizeof(int)*len);
int i;
for( i=0; i<len; ++i)
scanf("%d", &pArr[i]);
for(i=0; i<len; ++i)
printf("%d\n", *(pArr + i));
free(pArr);
return 0;
}