#include <stdio.h>
#include <stdlib.h>//malloc
#define T 1
#define F 0
typedef int ElementType;//分号!!!
typedef int Status;
typedef struct Node
{
ElementType value;
struct Node* next;
}Node;
//定义结构体 struct Node A 或者 Node A
//typedef struct Node* List;
typedef Node* List;
Status init(List* head);
Status insertHead(List head, ElementType value);
Status insertTail(List head, ElementType value);
Status insertIndex(List head, ElementType value, int index);
Status deleteInedx(List head, int index);
Status deleteValue(List head, ElementType value);
Status updateInedx(List head, ElementType value, int index);
Status updateValue(List head, ElementType oldValue, ElementType newValue);
Status queryIndex(List head, int index);
void queryValue(List head, ElementType value);
int getLength(List head);
void print(List head);
int main()
{
int i = 10;
int ret = 0;
List head = NULL;//一定定义的是结构体指针!!!
ret = init(&head);//传地址!要修改这个头结点
if (F == ret)
{
return 1;
}
//printf("init sucess!\n");
//*******以下为调试代码******//
for (; i > 0; i--)
{
insertHead(head, i);
}
//insertIndex(head, 9, 10);
//deleteInedx(head, 5);
//deleteValue(head, 0);
//deleteValue(head, 9);
updateInedx(head, 100, 1);
updateInedx(head, 100, 2);
updateInedx(head, 100, 10);
updateInedx(head, 100, 9);
updateValue(head, 100, 99);
print(head);
queryIndex(head, 1);
queryValue(head, 99);
//i = getLength(head);
//printf("%d", i);
return 0;
}
Status init(List* head)
{
List newNode = (List)malloc(sizeof(Node));
if (NULL == newNode)
{
return F;
}
newNode->value = 0;
newNode->next = NULL;
*head = newNode;
return T;
}
Status insertHead(List head, ElementType value)
{
List newNode = (List)malloc(sizeof(Node));
if (NULL == newNode)
{
return F;
}
newNode->value = value;
newNode->next = head->next;
head->next = newNode;
return T;
}
Status insertTail(List head, ElementType value)
{
List newNode = (List)malloc(sizeof(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 insertIndex(List head, ElementType value, int index)
{
int i = 1;
int len = getLength(head);
if (index < 1 || index > len + 1)//只可以在第一个位置和最后一个位置的后一个位置之间插入
{
return F;
}
List newNode = (List)malloc(sizeof(Node));
if (NULL == newNode)
{
return F;
}
newNode->value = value;
for (; i < index; i++)
{
head = head->next;
}
newNode->next = head->next;
head->next = newNode;
return T;
}
Status deleteInedx(List head, int index)
{
int i = 1;
int len = getLength(head);
List temp;
if (index < 1 || index > len)//只可以在第一个位置和最后一个位置之间删除
{
return F;
}
for (; i < index; i++)
{
head = head->next;
}
temp = head->next;
head->next = temp->next;
free(temp);
return T;
}
Status deleteValue(List head, ElementType value)
{
List temp;
while (head->next != NULL)
{
if (value == head->next->value)
{
temp = head->next;
head->next = temp->next;
free(temp);
}
else
{
head = head->next;
}
}
return T;
}
Status updateInedx(List head, ElementType value, int index)
{
int i = 1;
int len = getLength(head);
List temp;
if (index < 1 || index > len)//只可以在第一个位置和最后一个位置之间删除
{
return F;
}
for (; i < index; i++)
{
head = head->next;
}
head->next->value = value;
return T;
}
Status updateValue(List head, ElementType oldValue, ElementType newValue)
{
while (head->next != NULL)
{
if (oldValue == head->next->value)
{
head->next->value = newValue;
}
head = head->next;
}
return T;
}
Status queryIndex(List head, int index)
{
int i = 1;
int len = getLength(head);
List temp;
if (index < 1 || index > len)//只可以在第一个位置和最后一个位置之间查找
{
return F;
}
for (; i < index; i++)
{
head = head->next;
}
printf("index = %d value =%d\n", index, head->next->value);
return T;
}
void queryValue(List head, ElementType value)
{
int count = 0;
int index = 0;
while (head->next != NULL)
{
index++;
if (value == head->next->value)
{
count++;
printf("find %d : %d\n", value, index);
}
head = head->next;
}
if (0 == count)
{
printf("not found %d\n", value);
}
}
int getLength(List head)
{
int len = 0;
while (head->next != NULL)
{
head = head->next;//一定是 head = head->next; !!!才能往后遍历
len++;
}
return len;
}
void print(List head)
{
while (head->next != NULL)
{
printf("%d\n", head->next->value);
head = head->next;
}
}
链表的增删查改(C语言实现)
最新推荐文章于 2024-03-15 23:17:34 发布