顺序表
来源:互联网 发布:域名com cn top net 编辑:程序博客网 时间:2024/06/04 19:13
顺序表源代码
#include <stdio.h>#include <stdlib.h>#define list_init_size 100//线性表存储空间的初始分配量#define listincresement 100//线性表存储空间额分配增量#define OK 1#define ERROR 0typedef int elemType;typedef struct{ elemType *List; int length; int listsize;}Sqlist;void Againmalloc(Sqlist *L){ elemType *newbase; newbase=(elemType *)realloc(L->List,(L->listsize+listincresement)*sizeof(elemType)); if(!newbase) exit(-1); L->List=newbase; L->listsize+=listincresement;}void initlistsq(Sqlist *L){ L->List=(elemType *)malloc(list_init_size*sizeof(elemType)); if(!L->List) exit(-1); L->length=0; L->listsize=listincresement;}int listlength(Sqlist *L){ return L->length;}void traverselist(Sqlist *L){ int i; for(i=0;i<L->length;i++) { printf("%d ",L->List[i]); } printf("\n");}void insertfirst(Sqlist *L,elemType e)//表头插入元素{ int i; if(L->length>=L->listsize) Againmalloc(L); for(i=L->length-1;i>=0;i--) L->List[i+1]=L->List[i]; L->List[0]=e; L->length++;}void insertlast(Sqlist *L,elemType e){ if(L->length>=L->listsize) Againmalloc(L); L->List[L->length]=e; L->length++;}void insert(Sqlist *L,elemType e,int pos)//第pos处插入元素{ int i; if(pos<1||pos>L->length+1) exit(-1); if(L->length>=L->length+1) Againmalloc(L); for(i=L->length-1;i>=pos-1;i--) L->List[i+1]=L->List[i]; L->List[pos-1]=e; L->length++;}void search(Sqlist *L,elemType e){ int i; for(i=0;i<L->length;i++) { if(L->List[i]==e) { printf("已找到,%d在第%d个位置\n",e,i+1); return ; } } printf("没找到\n"); return ;}elemType deleteelem(Sqlist *L,int pos){ int i; elemType temp; if(pos<1||pos>L->length) { printf("越界\n"); exit(-1); } temp=L->List[pos-1]; for(i=pos;i<L->length;i++) L->List[i-1]=L->List[i]; L->length--; return temp;}int isempty(Sqlist *L){ if(L->length==0) return 1; else return 0;}void inversation(Sqlist *L){ elemType temp; int i; for(i=0;i<L->length/2;i++) { temp=L->List[i-1]; L->List[i-1]=L->List[L->length-i]; L->List[L->length-i]=temp; }}void mergelist(Sqlist *La,Sqlist *Lb,Sqlist *Lc){ Lc->listsize=Lc->length=La->length+Lb->length; Lc->List=(elemType *)malloc(sizeof(elemType)); if(!Lc->List) exit(-1); int i=0,j=0,k=0; while(i<La->length&&j<Lb->length) { if(La->List[i]<=Lb->List[j]) { Lc->List[k++]=La->List[i++]; } else { Lc->List[k++]=Lb->List[j++]; } } while(i<La->length) { Lc->List[k++]=La->List[i++]; } while(j<Lb->length) { Lc->List[k++]=Lb->List[j++]; }}void sort(Sqlist *L){ int i,j,k,temp; for(i=1;i<L->length;i++) { temp=L->List[i]; for(j=i-1;j>=0&&L->List[j]>temp;j--) { L->List[j+1]=L->List[j]; } L->List[j+1]=temp; }}int main(){ Sqlist list1; initlistsq(&list1); int length; scanf("%d",&length); int i; elemType temp; for(i=0;i<length;i++) { scanf("%d",&temp); insertlast(&list1,temp); } printf("创建好的线性表La=\n"); traverselist(&list1); int pos; scanf("%d%d",&temp,&pos); insert(&list1,temp,pos); printf("插入一个元素后的线性表La=\n"); traverselist(&list1); scanf("%d",&temp); search(&list1,temp); printf("倒置后的线性表La=\n"); inversation(&list1); traverselist(&list1); Sqlist list2; initlistsq(&list2); scanf("%d",&length); for(i=0;i<length;i++) { scanf("%d",&temp); insertlast(&list2,temp); } Sqlist list3; mergelist(&list1,&list2,&list3); printf("合并后的线性表=\n"); traverselist(&list3); printf("排序后的线性表\n"); sort(&list3); traverselist(&list3); return 0;}
阅读全文
0 0
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- 顺序表
- ubuntu 1604 桌面版中配置mesos测试环境
- 关于mysql优化原理收获不少的文章
- 二维数组中的查找
- Java读取word文件
- hdu_1087_和做的上一个递推一样_简单_不必复习
- 顺序表
- UVa1593 Alignment of Code
- 170819 四步安装Ubuntu 16.04 搜狗拼音输入法
- Android Studio 之 NDK篇
- STL之Map和multimap容器
- 初试docker-compose
- 最大容积--Container With Most Water of leetcode
- 算法题/丑数
- Gson使用中遇到的Date格式问题