您的位置:首页 > 其它

链表的创建、插入、删除等操作

2017-06-19 11:19 405 查看
#include<stdio.h>
#include<stdlib.h>

#define T 1
#define F -1

typedef int Status;
typedef int ElementType;

struct Node
{
ElementType value;
struct Node* next;
};

Status init(struct Node** head);
Status insert_head(struct Node* head, ElementType value);
Status insert_tail(struct Node* head, ElementType value);
Status insert_index(struct Node*head, ElementType value, int index);
Status delete_index(struct Node* head, int index);
Status delete_value(struct Node* head, ElementType value);
Status update_index(struct Node*head, int index, ElementType value);
void update_value(struct Node*head, ElementType old_value, ElementType new_value);
void query_value(struct Node* head, ElementType value);
Status query_index(struct Node* head, int index);
int length(struct Node* head);
void print(struct Node* head);

int main()
{
int i;
int ret = 0;

struct Node* head = NULL;
ret = init(&head);
if (F == ret)
{
return 1;
}

for (i = 0; i < 10; i++)
{
insert_head(head, i);
}
for (i = 0; i < 10; i++)
{
insert_tail(head, i);
}

print(head);

printf("length = %d\n", length(head));

delete_index(head, length(head) - 1);
delete_index(head, 0);
delete_index(head, 5);
print(head);

insert_index(head, 99, 5);
insert_index(head, 99, 0);
insert_index(head, 99, length(head));
print(head);

delete_value(head, 0);
print(head);

update_index(head, 4, -1);
print(head);

update_value(head, 99, 100);
print(head);

query_value(head, 100);
query_value(head, 99);

query_index(head, 10);

return 0;
}

Status
4000
init(struct Node** head)
{
struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}
newnode->value = 0;
newnode->next = NULL;
(*head) = newnode;

return T;
}

Status insert_head(struct Node* head, ElementType value)
{
struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}

newnode->value = value;
newnode->next = head->next;
head->next = newnode;

return T;
}

Status insert_tail(struct Node* head, ElementType value)
{
struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}

newnode->value = value;
newnode->next = NULL;

while (head->next != NULL)
{
head = head->next;
}

head->next = newnode;
return T;
}

Status insert_index(struct Node*head, ElementType value, int index)
{
if (index < 0 || index > length(head))
{
printf("out of range\n");
return F;
}

int i;
for (i = 0; i < index; i++)
{
head = head->next;
}

struct Node* newnode = (struct Node*)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return F;
}

newnode->value = value;
newnode->next = head->next;
head->next = newnode;

return T;
}

Status delete_index(struct Node* head, int index)
{
if (index < 0 || index >= length(head))
{
printf("out of range\n");
return F;
}
int i;
for (i = 0; i < index; i++)
{
head = head->next;
}

struct Node* temp = head->next->next;
free(head->next);
head->next = temp;
return T;
}

Status delete_value(struct Node* head, ElementType value)
{
int len = length(head);
int i;
for (i = 0; i < len; i++)
{
printf("i = %d value = %d\n", i, head->next->value);
if (head->next->value == value)
{
struct Node* temp = head->next->next;
free(head->next);
head->next = temp;
}
else
{
head = head->next;

}
}
return T;
}

Status update_index(struct Node*head, int index, ElementType value)
{
if (index < 0 || index >= length(head))
{
printf("out of rangr\n");
return F;
}
int i;
for (i = 0; i <= index; i++)
{
head = head->next;
}
head->value = value;
return T;
}

void update_value(struct Node*head, ElementType old_value, ElementType new_value)
{
int i;
while (head->next != NULL)
{
if (head->next->value == old_value)
{
head->next->value = new_value;
}
head = head->next;
}
}

void query_value(struct Node* head, ElementType value)
{
int count = 0;
int index = 0;
while (head->next != NULL)
{
if (head->next->value == value)
{
count++;
printf("find %d : %d\n", value, index);
}
head = head->next;
index++;
}
if (0 == count)
{
printf("not found %d\n", value);
}
}

Status query_index(struct Node* head, int index)
{
if (index < 0 || index >= length(head))
{
printf("out of rangr\n");
return F;
}
int i;
for (i = 0; i <= index; i++)
{
head = head->next;
}

printf("index = %d value =%d\n", index, head->value);
return T;
}

int length(struct Node* head)
{
int count = 0;
while (head->next != NULL)
{
count++;
head = head->next;
}
return count;
}

void print(struct Node* head)
{
while (head->next != NULL)
{
printf("%d ", head->next->value);
head = head->next;
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐