线性表基本操作
来源:互联网 发布:python unicode转中文 编辑:程序博客网 时间:2024/06/07 16:33
第一篇博客
线性表基本操作,暑假把大一的代码练习一遍。多多指教,谢谢
#include<stdio.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -1 #define LIST_INIT_SIZE 100typedef struct{ int *base; int length; int listsize;}SqList;int InitSqlist(SqList &l)//初始化{ l.base = (int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!l.base)exit(OVERFLOW); l.listsize = LIST_INIT_SIZE; l.length = 0; return OK; }int BulidSqlist (SqList &l){ int i,n; printf("请输入元素的个数\n"); scanf("%d",&n); if(n>LIST_INIT_SIZE) { l.base = (int *)realloc(l.base,(n*10)*sizeof(int)); if(!l.base)exit(OVERFLOW); l.listsize = n; } printf("请输入%d个元素的值\n",n); for(i=0;i<n;i++) scanf("%d",l.base+i); l.length = n; return OK;} void PrintSqlist(SqList &l)//输出元素以及表长{ int i; for(i=0;i<l.length;i++) printf("第%d个元素为%d\n",i+1,*(l.base+i)); printf("表长为:%d\n",l.length);} void Tips()//提示函数{ printf("\n请选择你的想要的操作:\n"); printf("<1> 输出顺序表及顺序表的长度\n"); printf("<2> 删除值为x的结点\n"); printf("<3> 删除给定位置i的结点\n"); printf("<4> 将顺序表逆置\n"); printf("<5> 将顺序表按升序排序\n"); printf("<6> 将x插入到顺序表的适当位置上\n"); printf("<7> 将两个有序表合并\n"); printf("<0> 退出\n\n");}int DeleteSqlist(SqList &l,int x)//删除值为X的元素{ int i; for(i=0;i<l.length;i++) if(*(l.base+i) == x) break; if(i == l.length) return ERROR; for(i++;i<l.length;i++) *(l.base+i-1) = *(l.base+i); l.length--; printf("删除后的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); return OK; }int DeleteSqlistIndex(SqList &l,int x)//删除指定位置的元素 { int i; if(x < 0 || x >= l.length) return ERROR; for(i=x+1;i<l.length;i++) *(l.base+i-1) = *(l.base+i); l.length--; printf("删除后的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); return OK;}void Inverse(SqList &l)//逆置函数 { int i,t; for(i=0;i<l.length/2;i++) { t=*(l.base+i); *(l.base+i) = *(l.base+l.length-i-1); *(l.base+l.length-i-1) = t; } printf("逆置后的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); }void SortSqlist(SqList &l)//冒泡 { int i,j,t; printf("排序前的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); for(i=1;i<l.length;i++) for(j=0;j<l.length-i;j++) { if(*(l.base+j)>*(l.base+j+1)) { t = *(l.base+j); *(l.base+j) = *(l.base+j+1); *(l.base+j+1) = t; } } printf("排序后的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); }int InserSqList(SqList &l,int x)//插入X(保持有序) { int i,tag; printf("插入前的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); if(l.length >= l.listsize) { l.base = (int *)realloc(l.base,(10)*sizeof(int)); if(!l.base) exit(OVERFLOW); l.listsize += 10; } for(i=0;i<l.length;i++) if(x < *(l.base+i)) break; tag = i; for(i=l.length;i>tag;i--) *(l.base+i) = *(l.base+i-1); *(l.base+tag) = x; l.length++; printf("插入后的Sqlist:\n"); for(i=0;i<l.length;i++) printf("%d\n",*(l.base+i)); return OK;}int MergerSqlist(SqList &l,SqList &lb)//合并2个线性表 { int i,j,k; SqList lc; InitSqlist(lc); if(lc.listsize<l.length + lb.length) {lc.base = (int *)realloc(lc.base,(l.length+lb.length+10)*sizeof(int)); if(!lc.base) return ERROR; lc.listsize = lc.listsize+l.length+lb.length+10; } i = j = k = 0; while(i<l.length && j<lb.length) { if(*(l.base+i) < *(lb.base+j)) { *(lc.base+k) = *(l.base+i); k++,i++; } else { *(lc.base+k) = *(lb.base+j); k++;j++; } } while(i<l.length) { *(lc.base+k) = *(l.base+i); i++;k++; } while(j<lb.length) { *(lc.base+k) = *(lb.base+j); j++;k++; } lc.length = l.length + lb.length; printf("合并后的Sqlist:\n"); for(i=0;i<lc.length;i++) printf("%d\n",*(lc.base+i)); return OK; } int main(){ int operate,x,tag; SqList l,lb; InitSqlist(l); BulidSqlist(l); Tips(); scanf("%d",&operate); while(operate) { switch(operate) { case 1 : PrintSqlist(l);break; case 2 : printf("请输入想要删除的元素\n"); scanf("%d",&x); tag = DeleteSqlist(l,x); if(tag) printf("删除值为%d的元素成功\n",x); else printf("删除值为%d的元素失败\n",x); break; case 3 : printf("请输入要删除的位置\n"); scanf("%d",&x); tag = DeleteSqlistIndex(l,x-1); if(tag)printf("删除位置为%d的元素成功\n",x); else printf("删除位置为%d的元素失败\n",x); break; case 4 : Inverse(l); break; case 5 : SortSqlist(l); break; case 6 : printf("请输入要插入的数据:\n"); scanf("%d",&x); tag = InserSqList(l,x); if(tag)printf("插入值为%d的元素成功\n",x); else printf("插入值为%d的元素失败\n",x); break; case 7 : printf("请输入Lb的内容\n"); InitSqlist(lb); BulidSqlist(lb); tag = MergerSqlist(l,lb); if(tag)printf("合并成功\n",x); else printf("合并失败\n",x); break; } Tips(); scanf("%d",&operate); } return 0; }
0 0
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 【数据结构】线性表基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- 线性表的基本操作
- .pch文件的作用及常见的一些问题
- java中float的取值范围
- easyUI treeGrid异步加载,前端+后台实现,包括增删改等具体功能
- #90 k Sum II
- centos7安装npm和nodejs
- 线性表基本操作
- 火狐浏览器内容默认样式表
- NYOJ49 开心的小明 DFS/01背包
- CPISI training and certification
- Linux间进程通信方式
- light oj 1094(初学邻接表)
- navicat 快捷键
- CodeForces 702B Powers of Two
- 《java面向对象编程》笔记-2