近期在重温数据结构,做了下总结,内容持续更新中。。。。。
//数据结构之顺序表 #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); }