您的位置:首页 > 其它

数组简单实现单向链表

2016-03-20 17:34 381 查看
#include "stdio.h"
#include "stdlib.h"

#define ElementType int
#define MAX_SIZE 20

typedef struct {
ElementType data[MAX_SIZE];
int last;
}List;

typedef List * Ptrl;

/**
*	初始化一个链表
*/
Ptrl MakeEmpty() {
Ptrl list = (Ptrl)malloc(sizeof(list));
list->last = -1;
return list;
}

/**
*	查找元素的位置
*	返回该位置的索引
*/
int Find(ElementType x, Ptrl list) {
int index = 0;
while ((index <= list->last)&&(list->data[index] != x))
index ++;
if (index > list->last)
return -1;
return index;
}

/**
*	添加元素
*/
int Add(ElementType x, Ptrl list) {
if (list->last == MAX_SIZE - 1)
return -1;
list->data[list->last + 1] = x;
list->last ++;
return 0;
}

/**
*	插入元素
*/
int Insert(ElementType x, int index, Ptrl list) {

int i;

if (list->last == MAX_SIZE - 1)
return -1;
if (index > list->last)
return -1;

for (i = list->last; i >= index; i -- ) {
list->data[i + 1] = list->data[i];
}
list->data[index] = x;
list->last ++;

return 0;
}

/**
*	删除元素
*/
int Delete (ElementType x, Ptrl list) {
int index = 0;
int i = 0;

while (index <= list->last && list->data[index] != x)
index ++;
if (index > list->last) //找不到
return -1;

for (i = index; i < list->last; i ++) {
list->data[i] = list->data[i + 1];
}
list->last --;

return 0;
}

/**
*	查询链表的长度
*/
int Length(Ptrl list) {
return list->last + 1;
}

/**
*	打印该链表信息
*/
void Print(Ptrl list){
int index = 0;
printf("length:%d\n",Length(list));
for (index = 0; index <= list->last; index ++) {
printf("%d ",list->data[index]);
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: