数据结构--顺序表c语言实现

来源:互联网 发布:java进阶书籍 知乎 编辑:程序博客网 时间:2024/04/28 11:13

SqList.h如下:

<pre name="code" class="cpp">#ifndef __SQLIST_H#define __SQLIST_Htypedef struct Sqlist{int *data;int usedsize;int size;}Sqlist;void InitList(Sqlist *list);//初始化顺序表void Destory(Sqlist *list);//摧毁顺序表bool ListEmpty(Sqlist *list);//判断顺序表是否为空int ListLength(Sqlist *list);//取得顺序表长度bool GetElem(Sqlist *list,int i,int *e);//取得顺序表中第i个元素的值放到ebool PriElem(Sqlist *list,int cur,int *e);//返回cur的前驱bool NextElem(Sqlist *list,int cur,int *e);//返回cur的后继bool Insert_Head(Sqlist *list,int var);//头插元素bool Insert_Tail(Sqlist *list,int var);//尾插元素bool Insert_Sq(Sqlist *list,int pos,int var);//在顺序表第pos个元素前插入varint Search(Sqlist *list,int var,int pos);//判断顺序表中pos后是否含有值为var的元素bool Delete(Sqlist *list,int pos);//删除第pos个元素void Show(Sqlist *list);//打印void Traverselist(Sqlist *list);//就地逆置#endif


SqList.c如下:
<pre name="code" class="cpp">#include"SqList.h"#include<stdio.h>#include<stdlib.h>#include<assert.h>#define MAXSIZE 20#define INCSIZE 10void InitList(Sqlist *list)//初始化顺序表{list->data=(int *)malloc(sizeof(int)*MAXSIZE);assert(list->data);list->size=MAXSIZE;list->usedsize=0;}void Destory(Sqlist *list)//摧毁顺序表{free(list->data);list->size=0;list->usedsize=0;}bool ListEmpty(Sqlist *list)//判断顺序表是否为空{if(list->usedsize==0)return true;return false;}int ListLength(Sqlist *list)//取得顺序表长度{return list->usedsize;}bool GetElem(Sqlist *list,int i,int *e)//取得顺序表中第i个元素的值放到e{if(i<0 || i>list->usedsize)return false;*e=list->data[i];return true;}bool PriElem(Sqlist *list,int cur,int *e)//返回cur的前驱{int pos=Search(list,cur,0);if(pos<=0)return false;*e=list->data[pos-1];return true;}bool NextElem(Sqlist *list,int cur,int *e)//返回cur的后继{int pos=Search(list,cur,0);if(pos<0 || pos==list->usedsize-1)return false;*e=list->data[pos+1];return true;}bool Insert_Head(Sqlist *list,int var)//头插元素{if(list->usedsize==list->size){list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));assert(list->data);list->size+=INCSIZE;}for(int i=list->usedsize;i>0;i--){list->data[i]=list->data[i-1];}list->data[0]=var;list->usedsize++;return true;}bool Insert_Tail(Sqlist *list,int var)//尾插元素{if(list->usedsize==list->size){list->data=(int *)realloc(list->data,sizeof(int)*(list->size+INCSIZE));assert(list->data);list->size+=INCSIZE;}list->data[list->usedsize]=var;list->usedsize++;return true;}bool Insert_Sq(Sqlist *list,int pos,int var)//在顺序表第pos个元素前插入var{if(pos<1 ||pos>list->usedsize+1)return false;for(int i=list->usedsize-1;i>=pos-1;i--){list->data[i+1]=list->data[i];}list->data[pos-1]=var;list->usedsize++;return true;}int Search(Sqlist *list,int var,int pos)//判断顺序表中pos后是否含有值为var的元素{if(pos<0 ||pos>list->usedsize+1)return -1;for(int i=pos;i<list->usedsize;i++){if(list->data[i]==var)return i;}return -1;}bool Delete(Sqlist *list,int pos)//删除第pos个元素{if(pos<1 ||pos>list->usedsize)return false;for(int i=pos;i<list->usedsize;i++){list->data[i-1]=list->data[i];}list->usedsize--;return true;}void Show(Sqlist *list)//打印{for(int i=0;i<list->usedsize;i++){printf("%d ",list->data[i]);}printf("\n");}



0 0
原创粉丝点击