/*
链式存储 结构
功能:增加 删除 查找 替换 返回总个数
2018年5月11日15点33分
*/
#include <stdio.h>
#include <malloc.h>
#define Ele int
typedef struct _LinkArrary
{
Ele data;
struct _LinkArrary * next;
}LinkArray;
LinkArray* New();
void Add(LinkArray* L, Ele data);
int RemoveByData(LinkArray* L, Ele data);
int RemoveByIndex(LinkArray* L, int index);
int FindIndexByData(LinkArray* L, Ele data);
Ele FindDataByIndex(LinkArray* L, int index);
int ReplaceByIndex(LinkArray* L, int index, Ele value);
int ReplaceByData(LinkArray* L, Ele oldData, Ele newData, int replaceAll);
void Traserval(LinkArray *L);
int Count(LinkArray *L);
int main()
{
int i;
LinkArray * L = New();//头节点,不存放数据,数据域可存放数据的个数
Traserval(L);//遍历
//增加
for(i = 0; i < 20; i ++)
{
Add(L,i / 2);
}
Traserval(L);//遍历
//RemoveByData(L, 0);//通过给定值删除
//RemoveByIndex(L, 0);//通过给定下标删除
//printf("查找:%d",FindIndexByData(L, 0));//通过给定值查找
//printf("查找:%d\n",FindDataByIndex(L,10));//通过给定下标查找
//ReplaceByIndex(L, i,i * 3);//通过给定下标替换
//ReplaceByData(L,8,110,1);//通过给定值替换
return 0;
}
//第一个节点为头节点,不存储有效数据
LinkArray* New()
{
LinkArray* L = (LinkArray*)malloc(sizeof(LinkArray));
L->data = 0;
L->next = NULL;
return L;
}
//增加
void Add(LinkArray* L, Ele data)
{
L->data ++;
while(L->next != NULL)
{
L = L->next;
}
L->next = New();
L->next->data = data;
}
//删除(通过给定值)
int RemoveByData(LinkArray* L, Ele data)
{
LinkArray* temp = L;
if(L->next == NULL)
{
return 0;
}
do
{
if(L->next->data == data)
{
temp->data--;
temp = L->next;
L->next = temp->next;
free(temp);
return 1;
}
L = L->next;
}
while(L->next != NULL);
return 0;
}
//删除(通过给定下标)
int RemoveByIndex(LinkArray* L, int index)
{
int i = 0;
LinkArray * temp = L;
if(index > L->data - 1)
{
return 0;
}
do
{
if(index == i)
{
temp->data --;
temp = L->next;
L->next = temp->next;
free(temp);
return 1;
}
L = L->next;
i++;
}
while(L->next != NULL);
}
//查找(通过给定数据查找第一个相匹配的数据的下标) (如果没有找到返回-1)
int FindIndexByData(LinkArray* L, Ele data)
{
int index = 0;
L = L->next;
while(L != NULL)
{
if(L->data == data)
{
return index;
}
L = L->next;
index++;
}
return -1;
}
//查找(通过下标查找相应的值) (如果没有就返回Ele默认值)
Ele FindDataByIndex(LinkArray* L, int index)
{
Ele data;
int i = 0;
if(index > L->data -1)
{
return data;
}
L = L->next;
while(L != NULL)
{
if(i == index)
{
return L->data;
}
L = L->next;
i++;
}
return data;
}
//修改(通过下标修改相应值)
int ReplaceByIndex(LinkArray* L, int index, Ele value)
{
int i = 0;
//下标越界
if(index > L->data -1)
{
return -1;
}
L = L->next;
while(L != NULL)
{
if(i == index)
{
L->data = value;
return 1;
}
L = L->next;
i++;
}
return -1;
}
//修改(把指定数据改为指定数据) (说明:如果replaceAll == 0,只替换第一个相匹配的,否则替换所有 )
int ReplaceByData(LinkArray* L, Ele oldData, Ele newData, int replaceAll)
{
int isReplaceOne = 0;
while(L->next != NULL)
{
L = L->next;
if(L->data == oldData)
{
isReplaceOne = 1;
L->data = newData;
if(replaceAll == 0)
{
return 1;
}
}
}
if(isReplaceOne)
{
return 1;
}
else
{
return 0;
}
}
//遍历
void Traserval(LinkArray *L)
{
printf("\n");
printf("Count = %d\n", Count(L));
L = L->next;
while(L != NULL)
{
printf("%d\n", L->data);
L = L->next;
}
}
//总数
int Count(LinkArray *L)
{
return L->data;
}
链式存储 结构
最新推荐文章于 2018-09-11 22:20:49 发布