数据结构中线性顺序表的基本操作(增删改查及合并)
2018-01-25 09:31
465 查看
#include <stdio.h> #define MAXSIZE 20 typedef int Elemtype; typedef struct Node{ Elemtype data[MAXSIZE]; int length; }sqList; //初始化 void initList(sqList *L) { L->length=0; printf("OK\n"); } //判断空表 void ListEmpty(sqList *L) { if(L->length==0) printf("空表\n"); else printf("非空表\n"); } //清空表 void clearList(sqList *L) { L->length=0; /*因为是通过Length来访问数据,Length==0则无法访问,相当于空表*/ printf("OK\n"); } //求表长 int ListLength(sqList *L) { return L->length; } //查第i个元素 void getElem(sqList *L,int i,Elemtype *e) { if(L->length==0||i<1||i>L->length) //判断L是否空表且i是否正确 return; *e=L->data[i-1]; printf("OK\n"); } //查某个元素的位置 int LocateElem(sqList *L,Elemtype e) //返回的是位置(不是下标),肯定用int { int i; if(L->length==0) return 0; for(i=0;i<L->length;i++) if(L->data[i]==e) return i+1; return 0; } //将元素插入指定位置 void insertList(sqList *L,int i,Elemtype e) { int j; if(L->length==MAXSIZE) //判断是否表满 return; if(i<1||i>L->length+1) //判断i是否正确 return; for(j=L->length-1;j>=i-1;j--) //从最后开始往右挪 插入得先挪再赋值 L->data[j+1]=L->data[j]; L->data[i-1]=e; L->length++; } //删除指定位置的元素 void deleteList(sqList *L,int i,Elemtype *e) { int j; if(L->length==MAXSIZE) //判断是否表满 return; if(i<1||i>L->length) //判断i是否正确 return; *e=L->data[i-1]; //删除得先赋值再挪 往左挪 for(j=i;j<L->length;j++) L->data[j-1]=L->data[j]; L->length--; printf("OK\n"); } //遍历 void TraverseList(sqList *L) { int i; if(L->length==0) printf("NULL\n"); else { for(i=0;i<L->length;i++) printf("%d ",L->data[i]); printf("\n"); } } //合并无序顺序表(不包括重复元素) void unionList(sqList *La,sqList *Lb,sqList *Lc) { int i,j,flag; for (i = 0; i < La->length; i++) Lc->data[i] = La->data[i]; Lc->length = La->length; flag = 0; for (i = 0; i < Lb->length && Lc->length<MAXSIZE; i++) { for (j = 0; j < La->length && flag==0; j++) { if (La->data[j] == Lb->data[i] ) flag=1; } if (flag == 1) continue; else Lc->data[Lc->length++] = Lb->data[i]; } } void Del_in_range(sqList *L,int x,int y) {//删除x和y之间的元素,时间复杂度为O(n) int backStep=0; for(int i=0;i<L->length;i++) { if(L->data[i]>=x&&L->data[i]<=y) backStep++; else L->data[i-backStep]=L->data[i]; } L->length=L->length-backStep; } int main() { sqList La,Lb,Lc; int i,j,t,temp;Elemtype e; initList(&Lb); for(i=1;i<=5;i++) insertList(&Lb,i,i); while(i=getchar()) { switch(i) { case '1':initList(&La);break; case '2':ListEmpty(&La);break; case '3':clearList(&La);break; case '4':printf("顺序表的长度为%d\n",ListLength(&La));break; case '5':printf("输入插入的位置以及插入元素\n"); scanf("%d %d",&t,&e); insertList(&La,t,e); break; case '6':printf("输入删除元素的位置"); scanf("%d",&t); deleteList(&La,t,&e); break; case '7':printf("输入要查找的位置\n"); scanf("%d",&t); getElem(&La,t,&e); printf("%d",e); break; case '8':unionList(&La,&Lb,&Lc);break; case '9':TraverseList(&La);break; case '0':TraverseList(&Lc); break; } } return 0; }
相关文章推荐
- 数据结构系列-线性表的顺序存储及基本操作
- 数据结构_顺序表的基本操作(c)
- 数据结构 - 顺序表的基本操作(C语言)
- Java数据结构与算法之数据结构-逻辑结构-线性结构(9)------Java线性结构概念及其基本操作
- 数据结构 - 顺序栈的基本操作(C语言)
- 线性表----队列(顺序表示)的基本操作
- 数据结构学习---线性表顺序存储结构的基本操作
- 数据结构中线性表的基本操作-合并两个线性表-依照元素升序排列
- 顺序线性表的基本操作
- 《数据结构之线性表合并操作》
- 数据结构 顺序表的基本操作 (C++ 版本)
- C语言版数据结构中顺序表的基本操作定义和初始化
- 数据结构之线性表中顺序表的基本操作
- MySQL---操作数据表基本操作(增删改查)
- 数据库的基本操作(增删改查)
- Android通讯录数据库介绍与基本操作(增删改查)
- 线性表----循环队列(顺序表示)的基本操作
- 数据结构—线性表之顺序表的操作
- 数据结构 线性表的基本操作(C语言)
- tp基本的增删改查的操作demo