顺序表
2015-09-08 23:26
344 查看
#include "stdio.h" #include "malloc.h" #define MAXSIZE 10 #define ADDSIZE 5 typedef int ElemType; typedef struct{ ElemType *elem; int length; int size; }SqList; void InitList(SqList *L){ L->elem=(ElemType *)malloc(MAXSIZE * sizeof(ElemType)); if(L!=NULL){ (*L).length=0; (*L).size=MAXSIZE; printf("内存分配成功!\n"); }else{ printf("内存分配失败!\n"); } } int ListInsert(SqList *L,int i,ElemType e){ int j; if(i<1||i>(*L).length+1){ ElemType * newElem; int k; newElem = (ElemType *)malloc((L->size+ADDSIZE)*sizeof(ElemType)); for(k=0;k<L->length;k++){ newElem[k]=L->elem[k]; } L->elem = newElem; L->size=L->size+ADDSIZE; } i--; for(j=L->length;j>i;j--){ L->elem[j]=L->elem[j-1]; } L->elem[i]=e; L->length++; return 1; } void ListTraverse(SqList *L){ int i; if(ListEmpty(L)){ return ; } for(i=0;i<L->length;i++){ printf("%d\t",L->elem[i]); } printf("\n"); } int ListEmpty(SqList *L){ return (L->length==0); } int ListLength(SqList *L){ return (L->length); } int ListSize(SqList *L){ return L->size; } ElemType GetElement(SqList *L,int i){ ElemType e=0; if(i<1||i>L->length){ return e; } e=L->elem[i-1]; return e; } int LocateElement(SqList *L,int i){ ElemType e=0; if(i<1||i>L->length){ return e; } e=L->elem[i-1]; return e; } void ClearList(SqList *L){ L->length=0; } void DestroyList(SqList *L){ free(L->elem); L->length=0; L->size=0; } int PutElement(SqList *L,int i,ElemType newValue){ int j; for(j=0;j<L->length;j++){ if(i==j+1){ L->elem[j]=newValue; return 1; } } return 0; } int ListDelete(SqList *L,int i){ int j; if(i<1||i>L->length){ return 0; } i--; for(j=i;j<L->length-1;j++){//向后移动指针域 L->elem[j]=L->elem[j+1]; } L->length--;//总长度少一 return 1; } main(){ int i; SqList L; ElemType e; printf("初始化线性表:\n"); InitList(&L); printf("插入数据:\n"); for(i=1;i<=10;i++){ ListInsert(&L,i,10-i); } printf("遍历数据;\n"); ListTraverse(&L); printf("删除第五个位置的元素\n"); ListDelete(&L,5); ListTraverse(&L); //修改第五个元素为 PutElement(&L,5,1); if(!ListEmpty(&L)){ printf("顺序表不为空\n"); } printf("顺序表的长度为:%d\n",ListLength(&L)); printf("顺序表的当前容量为:%d\n",ListSize(&L)); printf("顺序表第三个位置的元素为:%d\n",GetElement(&L,3)); printf("8在线性表中的位置为:%d\n",LocateElement(&L,8)); ClearList(&L); printf("现在顺序表的长度为:%d\n",ListLength(&L));//为0 printf("现在顺序表的当前容量为:%d\n",ListSize(&L));//不为0 //释放线性表 DestroyList(&L); printf("已销毁!\n"); ListTraverse(&L); printf("现在顺序表的当前容量为:%d\n",ListSize(&L));//销毁之后为0 }
相关文章推荐
- 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列
- poj 2391 二分+多源最短路+最大流
- 2014年7月华为校招机试真题4
- Nginx基础. HTTP过滤模块添加方式探讨
- 解决linux下不能挂载exfat的解决办法
- IOS 入门学习记录
- PS
- Cortex-M4 Core Registers
- 图论--有向图强连通分量的标记及缩点模板
- ok
- thinkServer rd340第一次装机过程
- jQuery事件代理
- linux压缩和解压缩命令大全
- lintcode-最多有k个不同字符的最长子字符串
- linux环境下使用pymssql模块链接数据库
- 单链表实现交差和
- STM32 F4 ADC DMA Temperature Sensor
- Linux磁盘与目录的容量
- 正则表达式
- 【工具类】jenv安装使用