【数据结构】线性表基本操作
2014-09-19 11:04
393 查看
//author:东方肖海 QQ:467064265 //version:1.0 //线性表的顺序存储结构 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 //定义结构体 typedef int ElemType; typedef struct SqList { ElemType data[MAXSIZE]; int length; }SqList; //构造一个空顺序表L SqList *init_SqList() { SqList *L; L=(SqList *)malloc(sizeof(SqList)); if(!L) { exit(1); } L->length=0; return L; } //初始化链表(为链表附初始值) SqList *Start_SqList(SqList *L,int i,ElemType x) { if(!L) { printf("线性表为空\n"); exit(1); } L->data[i]=x; L->length++; if(L->length>=MAXSIZE) { printf("错误\n"); exit(1); } } //插入某个元素 SqList *Insert_SqList(SqList *L,int i,ElemType x) { int m; if(i<1||i>(L->length+1)) { printf("插入位置i不合理!\n"); exit(1); } if(L->length>=(MAXSIZE-1)) { printf("顺序表已满,不能再插入!\n"); exit(1); } for(m=(L->length-1);m>=i-1;m--) { L->data[m+1]=L->data[m]; } L->data[i-1]=x; L->length++; return L; } //删除某个元素 SqList *Delete_SqList(SqList *L,int i) { ElemType e; if(i<1||(i>L->length)) { printf("删除位置i不合理!\n"); exit(1); } e=L->data[i-1]; printf("删除的位置对应的值为: %d\n",e); for(i;i<L->length;++i) { L->data[i-1]=L->data[i]; } L->length-=1; return L; } //按值查找 int LocateElem_Sq(SqList *L,ElemType x) { int i=1; while(i<=L->length&&L->data[i-1]!=x) { i++; } if(i>L->length) { return -1; } else { return i; } } //销毁整个顺序表 bool Destroy_SqList(SqList *L) { if(!L) { printf("失败,表为空!\n"); return 0; } else { free(L); L->length=0; return 1; } } //顺序表的输出 void Print_SqList(SqList *L) { if(!L) { printf("无法输出内容,表L为空!\n"); } int i; for(i=0;i<L->length;i++) { printf("%3d",L->data[i]); } } //主函数 int main() { SqList *L; L=init_SqList(); printf("顺序表初始化完成\n"); printf("接下来是构造初始顺序表操作,请输入插入内容的总数: "); int i,n,num; scanf("%d",&n); for(i=0;i<n;i++) { printf("请输入第%d个数的值: ",i+1); scanf("%d",&num); L=Start_SqList(L,i,num); } printf("顺序表输入操作完成,此时顺序表的内容为:\n"); Print_SqList(L); printf("\n接下来是插入操作,请输入要插入的位置和数值,如3,30\n"); scanf("%d,%d",&i,&num); L=Insert_SqList(L,i,num); printf("顺序表插入操作完成,此时顺序表的内容为:\n"); Print_SqList(L); printf("\n接下来是删除操作,请输入要删除值的位置: "); scanf("%d",&n); L=Delete_SqList(L,n); printf("此时顺序表的内容为:\n"); Print_SqList(L); printf("接下来是按值查找操作,请输入要查找的值: "); scanf("%d",&n); i=LocateElem_Sq(L,n); if(i==-1) { printf("输入位置有误!\n"); } else { printf("该值%d的位置在%d位置\n",n,i); } printf("接下来是销毁操作:\n"); if(Destroy_SqList(L)) { printf("销毁成功:\n"); } return 0; }
相关文章推荐
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 编程实现数据结构线性表基本操作
- 【数据结构】-线性表-链表-1326:链表的基本操作【好题】
- 数据结构_线性表_链式存储_单链表 的基本操作
- 【数据结构】-线性表-双向循环链表-1328:链表的基本操作【好题】
- 数据结构_线性表_链式存储_双向循环链表的基本操作
- 《数据结构》严蔚敏版(java解)——第二章 线性表01 基本操作
- 数据结构线性表之顺序表的基本操作插入、删除、遍历、初始化
- 重学数据结构001——链表基本操作与一元多项式相加
- 一.顺序存储结构线性表基本操作实现算法
- 数据结构 链表的基本操作
- 数据结构 链队列基本操作
- 重学数据结构001――链表基本操作与一元多项式相加
- 重学数据结构004——栈的基本操作及实现(数组实现)
- 一步一步复习数据结构和算法基础-二叉树基本操作
- 重学数据结构(一):链表基本操作与一元多项式相加
- 数据结构:一、线性表及例子操作
- 重学数据结构004――栈的基本操作及实现(数组实现)
- 重学数据结构003——栈的基本操作及实现(链式存储)
- 【数据结构】二叉树基本操作的程序实现