您的位置:首页 > 理论基础 > 数据结构算法

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

2014-11-03 23:42 309 查看
SqList.h如下:
<pre name="code" class="cpp">#ifndef __SQLIST_H
#define __SQLIST_H

typedef 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个元素的值放到e

bool 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个元素前插入var

int 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");}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: