数据结构之顺序表
近期在重温数据结构,做了下总结,内容持续更新中。。。。。
//数据结构之顺序表
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 100
typedef struct sqlist
{
int *data;
int length;
int size;
}Sqlist;
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
//初始化一个顺序表,返回1代表初始化成功,0表示是失败
int Sqlistinit(Sqlist *sql)
{
sql->data=(int *)malloc(sizeof(int)*MAX);
if(sql->data==NULL)
exit(0);
sql->size=MAX;
sql->length=0;
return 1;
}
//判断顺序表是否为空
int Sqlistisempty(Sqlist *sql)
{
if(sql->length==0)
return 1;
else
return 0;
}
//在第loc个元前插入元素a,返回1代表插入成功,0代表失败
int Sqlistinsert(Sqlist *sql,int a,int loc)
{
int i=0;
if(loc<1||loc>sql->length+1)
{
printf("参数不正确");
return 0;
}
if(sql->length>=sql->size)
{
sql->data=(int *)realloc(sql->data,sizeof(int)*(sql->size+MAX));
sql->size+=MAX;
}
for(i=sql->length-1;i>=loc-1;i--)
{
sql->data[i+1]=sql->data[i];
}
sql->data[loc-1]=a;
sql->length++;
return 1;
}
//删除第i个元素,返回1表示成功,0表示失败
int Sqlistdelete(Sqlist *sql,int loc)
{
int i=0;
if(i<1||i>sql->length)
{
printf("参数不正确");
return 0;
}
for(i=loc;i<sql->length;i++)
{
sql->data[i-1]=sql->data[i];
}
sql->length--;
return 1;
}
//获取第i个元素,返回第i个元素的值
int Sqlistgetelem(Sqlist *sql,int i)
{
if(i<1||i>sql->length)
{
printf("参数不正确");
return 0;
}
return sql->data[i-1];
}
//顺序表的排序,从小到大排序
void Sqlistsort(Sqlist *sql)
{
int i=0,j=0;
if(Sqlistisempty(sql)==1)
{
printf("顺序表为空");
exit(0);
}
for(i=0;i<sql->length;i++)
{
for(j=i+1;j<sql->length;j++)
{
if(sql->data[j]<=sql->data[i])
swap(&sql->data[j],&sql->data[i]);
}
}
}
//合并两个已经排序好的顺序表,保持从小到大的顺序
void Sqlistmerge(Sqlist *sql1,Sqlist *sql2,Sqlist *sql)
{
int i=0,j=0,k=0;
sql->length=sql1->length+sql2->length;
for(;i<sql1->length&&j<sql2->length;)
{
if(sql1->data[i]<=sql2->data[j])
{
sql->data[k]=sql1->data[i];
i++;
k++;
}
else
{
sql->data[k]=sql2->data[j];
j++;
k++;
}
}
if(i==sql1->length)
{
for(;j<sql2->length;)
{
sql->data[k]=sql2->data[j];
k++;
j++;
}
}
if(j==sql2->length)
{
for(;i<sql1->length;)
{
sql->data[k]=sql1->data[i];
k++;
i++;
}
}
}
//销毁一个顺序表
void Sqlistdestory(Sqlist *sql)
{
free(sql->data);
}
//顺序表已经存在,置空顺序表
void Sqlistcreate(Sqlist *sql,int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&sql->data[i]);
sql->length++;
}
}
//以此输出顺序表里面的元素
void Sqlistdisplay(Sqlist *sql)
{
int i=0;
if(Sqlistisempty(sql)==1)
{
printf("表为空");
exit(1);
}
for(i=0;i<sql->length;i++)
{
printf("%d ",sql->data[i]);
}
printf("\n");
}
void main()
{
Sqlist sql1,sql2,sql3;
Sqlistinit(&sql1);
Sqlistinit(&sql2);
Sqlistinit(&sql3);
printf("sql is empty ?%d\n",Sqlistisempty(&sql1));
Sqlistcreate(&sql1,5);
printf("sql:");
Sqlistdisplay(&sql1);
Sqlistcreate(&sql2,7);
printf("sql2:");
Sqlistdisplay(&sql2);
printf("sql is empty ?%d\n",Sqlistisempty(&sql1));
Sqlistinsert(&sql2,7,5);
printf("after insert sql2:");
Sqlistdisplay(&sql2);
printf("after sorted sql1:");
Sqlistsort(&sql1);
Sqlistdisplay(&sql1);
printf("after sorted sql2:");
Sqlistsort(&sql2);
Sqlistdisplay(&sql2);
printf("after merge sql3:");
Sqlistmerge(&sql1,&sql2,&sql3);
Sqlistdisplay(&sql3);
}

浙公网安备 33010602011771号