线性表基本操作
来源:互联网 发布:数据挖掘的功能 编辑:程序博客网 时间:2024/05/17 22:55
#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 10 //初始分配量#define LISTINCREMENT 5 //分配增量typedef int ElemType;typedef struct{ ElemType *elem;//存储空间基址 int length; //当前长度 int ListSize; //当前分配的存储} sqlist;int InitList_sq(sqlist *l) /*initial the list l*///形参是一个结构体指针{ l->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));//初始化十个int容量 if(!l->elem) // if l->elem == NULL 前面有个!就代表if里的值为true { printf("无法分配空间!"); return 1; } else { l->length=0;//当前长度置为0 l->ListSize=LIST_INIT_SIZE; //printf("ok\n"); return 0; }}int ListInsert_sq(sqlist &l, int i, int e)//增{ //线性表l第i个位置前插入e //从i起到最后一个向后移一位,注意先从最后一个开始移 ElemType *p, *q; if(i < 1 || i > l.length + 1)//插入位置有误 return 0; if(l.length >= l.ListSize)//存储空间已满,增加空间 { ElemType *newelem = (ElemType *)realloc(l.elem,(l.ListSize+LISTINCREMENT) * sizeof(ElemType)); if(!newelem) { exit(0); } l.elem = newelem;//更新基址 l.ListSize += LISTINCREMENT;//更新分配量 } q = &(l.elem[i-1]); //q是插入位置 for(p = &(l.elem[l.length-1]); p >= q; p--) { *(p+1) = *(p); } *q = e; l.length++; return 1;}int Delete_sq(sqlist &l, int i, ElemType &e)//删{ ElemType *q, *p; if(i < 1 || i > l.length || l.length == 0) //删除位置有误或者l是个空表 return 0; p = &(l.elem[i-1]);//删除元素的位置 e = *p; q = &(l.elem[l.length - 1]);//最后一个元素 for(;p < q;p++) { *(p) = *(p+1); } l.length--; return 1;}int FindValue_sq(sqlist &l, ElemType e)//查按值{ int j; if(l.length == 0) return 0; for(int i = 0; i < l.length; i++) { if(l.elem[i] == e) { j = i; break; } } if(i >= l.length) { printf("线性表中无这个值\n"); return 0; } return j+1;}int FindIndex_sq(sqlist &l, int i, ElemType &e)//查 按位置{ if(i <= 0 || i >= l.length-1) { printf("查找位置有误\n"); return -1; } e = l.elem[i-1]; return e;}void change(sqlist &l, int i, ElemType &e){ if(i <= 0 || i >= l.length-1) return; l.elem[i-1] = e;}void show(sqlist &l)//显示{ for(int i = 0; i < l.length; i++) { printf("%d ",l.elem[i]); } printf("\n");}void ui(){ printf(" 欢迎进入顺序表操作界面\n"); printf(" 1.插入数据\n"); printf(" 2.删除数据\n"); printf(" 3.修改数据\n"); printf(" 4.查找数据\n"); printf(" 5.显示数据\n"); printf(" 6.退出程序\n");}void FindUi(){ printf(" 1.按位置查找\n"); printf(" 2.按值查找\n"); printf(" 3.返回\n");}int main(){ sqlist L; int i, j,k, select; int e; InitList_sq(&L); for(i = 1; i <= 10; i++) ListInsert_sq(L,i,11-i);//第i个插入i while(1) { ui(); scanf("%d",&select); if(select == 1) { show(L); fflush(stdin); //system("cls"); printf("请输入要插入的位置:"); scanf("%d",&i); printf("请输入插入的值:"); scanf("%d",&e); ListInsert_sq(L,i,e);//第i个插入i printf("数据已插入\n"); show(L); fflush(stdin); printf("按任意键返回\n"); getchar(); system("cls"); } else if(select == 2) { show(L); fflush(stdin); printf("请输入删除的位置:"); scanf("%d",&i); //删除第i个数 Delete_sq(L,i,e); printf("数据已删除\n"); show(L); fflush(stdin); printf("按任意键返回\n"); getchar(); system("cls"); } else if(select == 3) { show(L); fflush(stdin); printf("请输入要修改的位置:"); scanf("%d",&i); printf("请输入修改后的值:"); scanf("%d",&e); change(L, i, e); printf("数据已修改\n"); show(L); fflush(stdin); printf("按任意键返回\n"); getchar(); system("cls"); } else if(select == 4) { while(1) { int find_select; system("cls"); FindUi(); scanf("%d",&find_select); fflush(stdin); if(find_select == 1) { show(L); scanf("%d",&i); //查找第i个数 e = FindIndex_sq(L,i,e); if(e!=-1) printf("%d\n",e); fflush(stdin); printf("按任意键返回\n"); getchar(); //system("cls"); } else if(find_select == 2) { show(L); scanf("%d",&e); j = FindValue_sq(L,e); printf("%d\n",j); fflush(stdin); printf("按任意键返回\n"); getchar(); //system("cls"); } else { system("cls"); break; } } } else if(select == 5) { fflush(stdin); show(L); printf("按任意键返回\n"); getchar(); system("cls"); } else { return 0; } }}
0 0
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 【数据结构】线性表基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- Java过滤器与SpringMVC拦截器之间的关系与区别
- 排序算法之选择排序
- linux下源码安装软件
- Android应用反汇编
- c#图片处理和读写文本总结
- 线性表基本操作
- android时间轴高度动态显示问题
- 数据结构之括号匹配
- 英语总结
- squid 配置用户密码登录代理服务器
- 有感,杂谈:
- HbaseAPI
- JavaScript for Kids 学习笔记14: 用键盘控制动画
- Android获取SIM卡信息 & TelephonyManager的介绍