线性表(顺序存储)C语言实现
来源:互联网 发布:office for mac通用 编辑:程序博客网 时间:2024/05/29 16:15
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#include <time.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INEEASTBLE -1#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef int Status;typedef struct{ char *name; int number; int data;}ElemType;typedef struct{ ElemType *elem;//存储空间基址 int length;//当前长度 int listsize;//当前分配容量}SqList;Status InitList_Sq(SqList *L)//初始化L{ L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L) exit(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK;}Status DestroyList(SqList *L)//销毁线性表{ while(L->length>0) { free(L->elem); --L->length; } free(L); return OK;}Status ClearList(SqList *L)//清空线性表{ if(0 == ListEmpty(L)) { L->length=0; return TRUE; } else { return FALSE; }}int ListLength(SqList L)//顺序表L长度{ return L.length;}Status ListEmpty(SqList L)//判断L是否为空{ if(0 == L.length) { return TRUE; } else { return FALSE; }}ElemType GetElem(SqList L,int i)//返回L中的第i个元素{ if(i<1 || i>L.length) return; return (L.elem[i-1]);}int LocateElem(SqList L,ElemType e)//返回L中第一个与e元素相同的位置{ int i=0; for(i=0;i<L.length;++i) { if(e.number==L.elem[i].number && e.data==L.elem[i].data) { return i+1; } } return 0;}ElemType PriorElem(SqList L,ElemType cur_e)//返回L中cur_e元素的前驱{ if(LocateElem(L,cur_e)<=1) return; return L.elem[LocateElem(L,cur_e)-2];}ElemType NextElem(SqList L,ElemType cur_e)//返回L中cur_e元素的后继{ if(LocateElem(L,cur_e)<=0 || LocateElem(L,cur_e)>=L.length) return; return L.elem[LocateElem(L,cur_e)];}Status ListInsert_Sq(SqList *L,int i,ElemType e)//向顺序表L插入数据{ ElemType *p,*q; if(i<1 || i>L->length+1)return ERROR; if(L->length>L->listsize) { ElemType *newbase=(ElemType*)realloc(L->elem,(L->listsize+LIST_INIT_SIZE)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L->elem=newbase; L->listsize+=LISTINCREMENT; } q=&(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=q;--p) { *(p+1)=*p; } *q=e; ++L->length; return OK;}Status ListDelete_Sq(SqList *L,int i,ElemType e)//删除数据{ ElemType *p,*q; if(i<1 || i>L->length) return ERROR; p=&(L->elem[i-1]); e=*p; printf("DeleteNode:\t"); printf("%d\t%d\n",e.number,e.data); q=L->elem+L->length-1; for(++p;p<=q;++p) { *(p-1)=*p; } --L->length; return OK;}Status ListTraverse(SqList *L, int (*visit)(ElemType e)){ int i, ret; for (i = 0; i < L->length; ++i) { ret = visit(L->elem[i]); if (ret != 0) return ret; } return ERROR;}int main(){ srand((int) time(0)); SqList L; ElemType e; int k=0; InitList_Sq(&L); for(k=0;k<10;k++) { e.number=k; e.data=rand()%100; ListInsert_Sq(&L,k+1,e); } printf("InitListNode:\n"); for(k=0;k<L.length;++k) { printf("\t%d\t%d\n",L.elem[k].number,L.elem[k].data); } printf("ListLength:%d\n",ListLength(L)); ListDelete_Sq(&L,rand()%10,e); printf("DeleteListNode:\n"); for(k=0;k<L.length;++k) { printf("\t%d\t%d\n",L.elem[k].number,L.elem[k].data); } DestroyList(&L); printf("DestroyList:\n"); for(k=0;k<L.length;++k) { printf("\t%d\t%d\n",L.elem[k].number,L.elem[k].data); }}
github地址:https://github.com/lcafe8/DataStructure
0 0
- 线性表(顺序存储)C语言实现
- 线性表的顺序存储结构(C语言实现)
- 顺序存储结构线性表的C语言实现
- 用C语言实现线性表的顺序存储结构
- C语言实现线性表之顺序存储结构操作
- 线性表顺序存储结构的c语言实现
- 线性表的顺序存储结构的c语言实现
- C语言实现一般线性表的顺序存储
- 线性表顺序存储-使用c语言实现
- C语言--线性表的顺序存储的实现
- 线性表-顺序存储结构(C语言实现)
- 线性表的顺序静态存储--C语言实现
- 线性表的顺序存储实现c语言
- 线性表顺序实现(C语言)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表的顺序存储结构(c语言源码实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- 线性表之顺序存储结构(C语言动态数组实现)
- jquery表格简单插件
- 算法竞赛入门经典:第六章 数据结构基础 6.9 根据二叉树的后序和中序确定前序序列
- LINUX操作系统VIM的安装和配置
- Android 自定义View (一)
- CMake 学习
- 线性表(顺序存储)C语言实现
- 开门人和关门人
- tomcat 启动异常排查
- 算法竞赛入门经典:第六章 数据结构基础 6.10黑白图像
- java内存管理:垃圾回收机制
- iOS请求网络数据的方式
- 第八章 主机名称与主机地址
- 模态,非模态对话框
- 超级文件分割《合并》机(分割大文件)