#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef int bool;
struct Array
{
int * pHead;//头指针
int len;//数组长度
int cnt;//当前元素个数
};
void initArray(struct Array *p,unsigned length);//初始化数组函数
void showArray(struct Array *p);//输出数组
bool isEmpty(struct Array *p);//判断数组元素是否为0
bool isFull(struct Array *p);//判断元素是否为满
void appand(struct Array *p,int i);//末尾追加元素
void sort(struct Array *p);//int jj;
int main()
{
struct Array arr;
initArray(&arr, 5);
appand(&arr, 3);
appand(&arr, 1000);
appand(&arr, 5);
printf("sort before:");
showArray(&arr);
sort(&arr);
printf("\nsort after:");
showArray(&arr);
}//初始化数组
void initArray(struct Array *p,unsigned length)
{
if(length==0)
{
printf("数组长度不合法\n");
exit(0);
} //
p->pHead=(int *)malloc(sizeof(int));
if((p->pHead=(int *)malloc(sizeof(int)))==NULL)
{
printf("初始化失败\n"); //
exit(0);
}
p->len=length;
p->cnt=0;
// free(p->pHead);
}
//数组输出函数
void showArray(struct Array *p)
{
// struct Array *h=(struct Array*)malloc(sizeof(struct Array));
// h=p;
int i;
if(p->len==0) printf(NULL);
if(p->cnt==0) printf("数组元素为空\n");
for (i=0; i<p->cnt; i++)
{
printf("%d ",p->pHead[i]);
}
//return p;
}//判断数组是否为空
bool isEmpty(struct Array *p)
{
return p->cnt==0?1:0;
}//判断数组是否满
bool isFull(struct Array *p)
{
return p->cnt==p->len?1:0;
}//末尾追加元素
void appand(struct Array *p,int i)
{
//判断当前元素是否已满
if(isFull(p)) printf("元素已满,添加失败\n");
p->pHead[p->cnt]=i;
p->cnt=p->cnt+1;
}//排序冒泡
void sort(struct Array *p)
{ int i,j;
int temp;
for (i=0; i<=p->cnt-1; i++)
{
for (j=0; j<=p->cnt-i-i ; j++)
{
if (p->pHead[j]>p->pHead[j+1])
{
temp=p->pHead[j];
p->pHead[j]=p->pHead[j+1];
p->pHead[j+1]=temp;
}
}
}
}
输出有时候会变 正常应该输出 3 5 1000 但是它输出有时候会变成各种奇怪的值偶尔