顺序表的基本操作
来源:互联网 发布:炫浪网络社区百合 编辑:程序博客网 时间:2024/06/03 23:42
/* Name: 线性表基本操作 Copyright: Author: zxm Date: 14/06/17 21:09 Description: 线性表的建立 查找 删除 插入 置空 合并有序表 */#include <stdio.h>#define MAX 100typedef struct { int last; //记录线性表中最后一个元素在数组elem[]中的位置 int elem[MAX];}SeqList;/*所有的操作需传入L的地址,改变的才是L的值(地址传递).否则改变的的只是形参的值(即值传递).*///初始化线性表 void InitList(SeqList *L){ L->last = -1; }//返回表元素个数,若为空表返回0 int ListLength(SeqList *L){ return L->last+1;} //向表后添加数据 void AddList(SeqList *L,int i){ L->elem[L->last+1] = i; L->last++;}//在表中第k位插入值为e的数据 void InsertList(SeqList *L, int k, int e){ L->last++; for(int i = L->last; i >= k-1; i--){ L->elem[i] = L->elem[i-1]; } L->elem[k-1] = e;}//删除线性表中第k个元素,并用e返回其值 bool DelList(SeqList *L, int k, int *e){ int i = 0; if(k < 1 || k > L->last+1){ return false;//删除位置不合法 } *e = L->elem[k-1]; for(i = k-1; i <= L->last; i++){ L->elem[i] = L->elem[i+1]; } L->last--; return true;} //判断是否为空表 bool EmptyList(SeqList *L){ if(L->last == -1)return true; else return false;} //寻找线性表中第k个元素,返回其值 bool FindList(SeqList *L, int k, int *e){ if(k < L->last && k >= 1){ *e = L->elem[k-1]; return true; } else { printf("寻找位置不合法"); return false; }}//寻找线性表中值为k的元素,返回在表中位置,未找到返回-1 int LocateList(SeqList *L, int k){ int i; for(i = 0; i <= L->last; i++){ if(L->elem[i] == k)return i+1; } return -1;}//合并两个有序线性表void MergeList(SeqList *L,SeqList *L2){ int i = 0, j = 0; while(i <= L->last && j <= L2->last){ if(L->elem[i] < L2->elem[j]){ i++; }else{ InsertList(L,i+1,L2->elem[j]); j++; i++; } } while(j++ <= L2->last){ // L->last++; AddList(L,L2->elem[j]); }} //打印表中的值void printList(SeqList *L){ for(int i = 0; i <= L->last; i++){ printf("%d ",L->elem[i]); }}int main(){ SeqList L; InitList(&L); SeqList L2; InitList(&L2); int n; int k,e; //在表中添加数据 while(scanf("%d",&n)!=EOF){ AddList(&L,n); } printList(&L); //删除数据 printf("删除第k个数据:"); scanf("%d",&k); if(DelList(&L,k,&e)) printf("删除的数据是:%d\n",e); else printf("删除位置不合法\n"); printList(&L); //寻找第k个数据 printf("寻找第k个数据:"); scanf("%d",&k); if(FindList(&L,k,&e)){ printf("找到的数据是%d\n",e); } else printf("寻找位置不合法\n"); //寻找值为e的数据 printf("寻找值为e的数据:"); scanf("%d",&e); k = LocateList(&L,e); if(k==-1){ printf("线性表中无值为%d的元素\n",e); }else{ printf("值为%d的元素在线性表中位于第%d位\n",e,k); } //向表中第k位插入值为e的元素 printf("向表中第k位插入值为e的元素(输入两数之间用空格隔开):"); scanf("%d %d",&k,&e); if(k > L.last){ printf("插入位置不合法\n"); }else{ InsertList(&L,k,e); printList(&L); } //合并两个线性表 printf("合并两个有序线性表\n"); printf("输入另一个非递减有序线性表:"); while(scanf("%d",&n)!=EOF){ AddList(&L2,n); } MergeList(&L,&L2); printf("合并之后的线性表为:"); printList(&L); return 0;}
.
阅读全文
0 0
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 【shiro】--- 身份认证
- Android Studio-Didn't find class XXX on path: DexPathList [zip file "/data/app/packagename/base.apk]
- POI读取Excel处理斜体-加标签<i></i>
- 编写运行hadoop mapreduce程序
- C#之入门总结_文件读取_21
- 顺序表的基本操作
- idea编译问题
- block,inline和inline-block概念和区别
- Ubuntu下安装Redis数据库,与基于Redis数据库搭建主从服务器
- OpenCV之将图像拼装成视频
- HDU
- 判断程序是否算稳的小程序
- 2017年8月12日提高组T2 YMW的数学题
- js跨域时IE9多次请求问题