顺序表的基本操作用c语言实现
来源:互联网 发布:淘宝app怎么下载不了 编辑:程序博客网 时间:2024/06/06 00:52
#include <stdio.h>#include <stdbool.h>#include <malloc.h>#define initSize 20typedef struct{ int *data; int len,maxsize;//当前元素个数和最大容量}SqList;bool InitList(SqList *L);bool ListInsert(int i,int x,SqList *L);bool ListDelete(int i,SqList *L);int LocateElem(int x,SqList *L);void ListPrint(SqList *L);void ListRevrse(SqList *L);void DeleteElem(SqList *L);void MergeList(SqList *LA,SqList *LB,SqList *L);int main(){ SqList L,LA,LB; InitList(&LA); LA.data[0]=1;LA.data[1]=3;LA.data[2]=5;LA.data[3]=7;LA.data[4]=9; LA.len=5; InitList(&LB); LB.data[0]=2;LB.data[1]=4;LB.data[2]=5;LB.data[3]=6;LB.data[4]=10;LB.data[5]=11;LB.data[6]=12; LB.len=7; InitList(&L); ListPrint(&L); /*ListInsert(1,1,&L); ListInsert(2,2,&L); ListInsert(3,2,&L); ListInsert(4,2,&L); ListInsert(5,2,&L); ListInsert(6,3,&L); ListInsert(7,3,&L); ListInsert(8,3,&L); ListInsert(9,4,&L); ListInsert(10,4,&L); ListInsert(11,5,&L); ListPrint(&L); printf("-------在第2个位置插入80--------\n"); bool flag=ListInsert(2,80,&L); if(flag==false) printf("插入出错!\n"); else ListPrint(&L); printf("-------删除第4个位置的数据--------\n"); ListDelete(4,&L); ListPrint(&L); printf("-------找出4位于第几个位置--------\n"); int pos=LocateElem(67,&L); printf("%d\n",pos); printf("-------逆置线性表--------\n"); ListRevrse(&L); ListPrint(&L); printf("-------删除重复的元素--------\n"); DeleteElem(&L); ListPrint(&L);*/ printf("-------合并表--------\n"); MergeList(&LA,&LB,&L); ListPrint(&L); printf("-------交换顺序--------\n"); MergeList(&L,5,6); ListPrint(&L); return 0;}bool InitList(SqList *L)//构造一个空的线性表{ L->data=(int*)malloc(initSize*sizeof(int)); if(L->data==NULL) return false; L->len=0; L->maxsize=initSize; return true;}bool ListInsert(int i,int x,SqList *L)//插入元素{ int j; if(i>L->len+1||i<1)//判断插入位置是否合法 return false; if(L->len>=L->maxsize)//判断表是否已满 return false; for(j=L->len;j>=i;j--){ L->data[j]=L->data[j-1]; } L->data[j]=x; L->len++; return true;}bool ListDelete(int i,SqList *L)//删除元素{ int j; if(i<1||i>L->len)//判断删除位置是否合法 return false; for(j=i;j<L->len;j++) L->data[j-1]=L->data[j]; L->len--; return true;}int LocateElem(int x,SqList *L)//查找元素{ int i; for(i=0;i<L->len;i++){ if(L->data[i]==x){ return i+1; } } return 0;}void ListRevrse(SqList *L)//逆置元素,要求空间复杂度为(1){ int i,j,dep; for(i=0;i<L->len/2;i++) { j=L->len-1-i; dep=L->data[i]; L->data[i]=L->data[j]; L->data[j]=dep; }}void DeleteElem(SqList *L)//删除重复的元素{ int i,n=0,k=L->data[0]; for(i=1;i<L->len;i++) { if(L->data[i]==k) n++; else k=L->data[i]; L->data[i-n]=L->data[i]; } L->len-=n;}void MergeList(SqList *LA,SqList *LB,SqList *L)//合并{ int i=0,j=0; while(i<LA->len&&j<LB->len) { if(LA->data[i]<=LB->data[j]) { L->data[i+j]=LA->data[i]; i++; } else { L->data[i+j]=LB->data[j]; j++; } } if(i==LA->len) { for(;j<LB->len;j++) L->data[i+j]=LB->data[j]; } else { for(;i<LA->len;i++) L->data[i+j]=LB->data[i]; } L->len=i+j;}void ExchangeList(SqList *L,int m,int n)//将数组中两个线性表顺序互换{ int i; if(m<n) { int s[n]; for(i=0;i<n;i++) s[i]=L->data[i+m]; for(i=0;i<m;i++) L->data[n+i]=L->data[i]; for(i=0;i<n;i++) L->data[i]=s[i]; } else { int s[m]; for(i=0;i<m;i++) s[i]=L->data[i]; for(i=0;i<n;i++) L->data[i]=L->data[m+i]; for(i=0;i<m;i++) L->data[n+i]=s[i]; }}void ListPrint(SqList *L){ int i; if(L->len==0) printf("线性表为空\n"); for(i=0;i<L->len;i++){ printf("%d\n",L->data[i]); } printf("length=%d\n",L->len);}
阅读全文
0 0
- 顺序表的基本操作用C 语言实现
- 顺序表的基本操作用c语言实现
- 单链表的基本操作用c语言表示
- c语言顺序表的实现与基本操作
- C语言实现顺序表的基本操作
- C语言实现----顺序表的基本操作(1)
- 顺序线性表的基本操作(C语言实现)
- (10.15)静态实现顺序栈的基本操…
- Hbase 基本操作用 在java 上的实现
- C语言顺序表的基本操作
- C语言实现顺序栈的基本操作
- C语言实现顺序栈的基本操作
- 数据结构C语言实现线性表(顺序实现)的初始化与基本操作
- C语言实现顺序表的插入、删除、查找、遍历等基本操作
- 线性表的顺序实现(C语言)
- 顺序表的C语言实现
- 线性表的顺序实现(c语言)
- 顺序表的实现(C语言)
- Ceph与Swift简易对比
- C++:重载、覆盖与隐藏
- 【PAT】【Advanced Level】1041. Be Unique (20)
- POJ3041 Asteroids【二分匹配】
- 监听浏览器回退事件
- 顺序表的基本操作用c语言实现
- 组合数求模
- Linux检测IP地址冲突
- Navigation Nightmare poj 1984
- lua中__call元方法
- Python面试题
- 【hdu 6069】 Counting Divisors 【思维+数论】
- C
- 限制用户输入 正则表达式 去除中文 中文符号