指尖上的代码[C语言版]-<6>
2012-08-12 14:50 java线程例子 阅读(287) 评论(0) 编辑 收藏 举报<6> 数据结构---线性表的顺序存储结构
分析:
代码:
#include "stdio.h" #include "stdlib.h" #define M 20 /*自定义数组大小*/ #define Type "%d" typedef int DataType; /*为现有类型创建同义词,自己可更改数据类型*/ typedef struct { DataType array[M]; /*数组*/ int subscript; /*数组最后一个元素的下标*/ } sequencetable; /*自定义数据类型sequenacetable*/ sequencetable *s; /*定义sequencetable类型的指针变量s*/ int flag=0; /*用来标示数组是否初始化了*/ /*函数声明*/ void Initialization(); void Print(); void Insert(); void Delete(); int main(void) { int options; printf("数据结构>>线性表的顺序存储结构\n"); printf("1.初始化顺序表\n"); printf("2.浏览顺序表\n"); printf("3.按位置插入元素\n"); printf("4.按位置删除元素\n"); printf("5.退出\n"); while(1) { printf("请选择您要进行的操作:"); scanf("%d",&options); switch(options) { case 1:Initialization();break; case 2:Print();break; case 3:Insert();break; case 4:Delete();break; case 5:free(s);exit(0);break; default:printf("请输入数字1-5进行选择!\n"); } } return 0; } void Delete() { int locate,i; if(flag==0) { printf("请先对顺序表初始化!\n"); } else { if(s->subscript==-1) { printf("顺序表里暂时没有数据,不能进行删除操作!\n"); } else { printf("请输入您要删除的元素所在的位置(0<位置<=%d):",s->subscript+1); scanf("%d",&locate); if(locate>(s->subscript+1)) { printf("您要删除的元素不存在!\n"); Delete(); } else { if(locate==s->subscript+1) { s->subscript--; } else { for(i=locate;i<=s->subscript;i++) { s->array[i-1]=s->array[i]; } s->subscript--; } printf("元素已成功删除!\n"); } } } } void Insert() { int locate,i; DataType x; if(flag==0) { printf("请先对顺序表进行初始化!\n"); } else { printf("请输入您想要要插入的位置(1-%d):",M); scanf("%d",&locate); if(locate<=0||locate>M) { printf("您输入的位置不在1-%d之间,请重新输入!\n",M); Insert(); } else { printf("请输入您要插入的元素:"); scanf(Type,&x); if(s->subscript<locate-1) { s->subscript=locate-1; s->array[s->subscript]=x; } else { if(s->subscript==M-1) { if(locate==M) { s->array[s->subscript]=x; } else { for(i=s->subscript-1;i>=locate-1;i--) { s->array[i+1]=s->array[i]; } s->array[locate-1]=x; } } else { s->subscript++; for(i=s->subscript-1;i>=locate-1;i--) { s->array[i+1]=s->array[i]; } s->array[locate-1]=x; } } printf("元素已成功插入顺序表!\n"); } } } void Print() { int i; if(flag==0) { printf("请先对顺序表初始化!\n"); } else if(s->subscript==-1) { printf("顺序表里暂时没有数据!\n"); } else { for(i=0;i<=s->subscript;i++) { printf(Type,s->array[i]); printf(" "); } printf("\n"); } } void Initialization() { s=(sequencetable *)malloc(sizeof(sequencetable)); /*为顺序表申请内存空间*/ s->subscript=-1; flag=1; printf("顺序表初始化已完成!\n"); }
编译结果:
点石成金 写于 2012/08/12/14:54