指尖上的代码[C语言版]-<6>数据结构之顺序表
2012-08-12 14:50
513 查看
<6> 数据结构---线性表的顺序存储结构
分析:
代码:
编译结果:
点石成金 写于 2012/08/12/14:54
分析:
代码:
#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
相关文章推荐
- 指尖上的代码[C语言版]-<7>数据结构之单链表
- 指尖上的代码[C语言版]-<5>
- 指尖上的代码[C语言版]-<6>
- 指尖上的代码[C语言版]-<3>
- 指尖上的代码[C语言版]-<2>
- 指尖上的代码[C语言版]-<1>
- 指尖上的代码[C语言版]-<4>
- <四>java数据结构与算法 插入排序
- 《Windows程序设计》读书笔记------------->>窗口和消息 -- 代码结构和消息机制<<
- SQL Server XML基础学习之<6>--XML modify() 方法对 XML 数据中插入、更新或删除
- 数据挖掘--kmeans聚类算法mapreduce实现代码<转>
- 数据结构与算法(C语言)<绪论>
- 指尖上的代码[C语言版]-<3>
- <6.21>数据结构整理(Treap,线段树,主席树)
- 指尖上的代码[C语言版]-<3>
- <复习>数据结构中的结构体
- <<数据结构和离散数学>>树的等价关系,集合论学习
- 指尖上的代码[C语言版]-<2>
- <include>标签和BaseActivity联合使用简化代码结构
- 指尖上的代码[C语言版]-<2>