您的位置:首页 > 编程语言 > C语言/C++

简单的顺序表c语言实现

2016-07-25 00:00 363 查看
摘要: c语言实现简单顺序表几种常用操作

#include <stdio.h>
#include <stdlib.h>

//存放的数据类型
#define ElemType int
//表的大小
#define MAX_SIZE 100

typedef struct {
ElemType *e;	//数据
int len;		//已经存放的数据数目
int size;		//可以存放的数据数目
} SqList;

void initSqList(SqList* list);
void showList(SqList* list);
void appendElem(SqList	*list,ElemType	e);
void insertElem(SqList* list,int i,ElemType e) ;
void delElem(SqList *list,int i);

int main(int argc, char *argv[])
{
SqList *list=(SqList*)malloc(sizeof(SqList));
initSqList(list);
appendElem(list,3);
appendElem(list,6);
appendElem(list,1);
appendElem(list,2);

showList(list);
insertElem(list,3,10);
showList(list);
delElem(list,4);
showList(list);
free(list);
return 0;
}

//初始化
void initSqList(SqList* list){
list->e = (ElemType *)malloc(sizeof(ElemType)*MAX_SIZE);
list->len=0;
list->size=MAX_SIZE;
printf("initList successful!\n");
return;
}

//打印表中数据
void showList(SqList* list){
if(list == NULL || list	->len == 0	) {
printf("this list is empty!\n");
return;
}

int i,len;
len=list->len;
printf("this list have %d elems:\n",len);
for(i=0;i<len;i++){
printf("%d  ",list->e[i]);
}
printf("\n");
return;
}

//在表的最后附加数据
void appendElem(SqList	*list,ElemType	e){
int len=list->len,size=list->size;
if(len+1>size) {
printf("append err:this list is full\n");
return;
}
list->e[len] = e;
list->len++;	//不能使用局部变量len++
return;
}

//在表的第i个元素之前插入新数据
void insertElem(SqList* list,int i,ElemType e){
int len=list->len,size=list->size;
if(len+1>size || i<1 || i>len+1) {
printf("insert err\n");
return;
}

if(i==len+1) {
appendElem(list,e);
return;
}

int j;
ElemType *p;
for(j=len;j>=i;j--){		//第i个元素以及以后元素依次向后移动一位
p=&list->e[j];
*p = list->e[j-1];
}
list->e[j]=e;
list->len++;
return;
}

//删除第i个元素
void delElem(SqList *list,int i){
int len=list->len;
if(i<1 || i>len || len<0){
printf("del err\n");
return;
}

int j;
ElemType *p;
for(j=i;j<len;j++){			//第i+1个元素依次向前移动一位
p=&list->e[j-1];		//数组元素序号由0开始,元素位数由1开始
*p=list->e[j];
}

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