单链表的功能使用:初始化,赋值,输出,删除,按值查找,按地址查找,数据修改

#include<stdio.h>
#include <stdlib.h>
typedef struct Node* A;
struct Node
{
A next;
int value;
};
int init(A *head);                                                        //单链表初始化
int insert(A head, int x);                                             //单链表的结点插入

void print(A head);                                                     //单链表的输出

 int inserthead(A head, int x);                                    //单链表从表头开始插入数据

int length(A head);                                                     //计算单链表的长度
int insert2(A head, int value, int index);                     // 单链表从尾开始插入
int search(A head, int value);                                    //根据值在查找数据并删除
void querty(A head, int value);                                  //根据值查找数据位置
void queriy(A head, int x);                                         // 根据地址查找数据的值
int main()
{
int i;
A head;
int ret = init(&head);
if (-1 == ret)
{
        return -1;
}
for (i = 0; i < 10; i++)
{
insert(head, i);
}
for (i = 0; i < 10; i++)
{
inserthead(head, i);
}
print(head);
    printf("length = %d\n", length(head));
    delete(head, 3);
print(head);
insert2(head, 99, 5);
print(head);
search(head, 9);
print(head);
querty(head, 0);
queriy(head, 6);
return 0;
}
int init (A *head)
{
A newnode = (A )malloc(sizeof(struct Node));
if (NULL == newnode)
{
return -1;
}
*head = newnode;
newnode->value = 0;
newnode->next = NULL;
    return 0;
}
int insert(A head, int element)
{
A newnode = (A)malloc(sizeof(struct Node));
if (NULL == newnode)
{
return -1;
}
newnode->value = element;
newnode->next = NULL;
while (head->next != NULL)
{
head = head->next;
}
head->next = newnode;
    return 0;
}
void print(A head)
{
while (head->next != NULL)
{
printf("%d  ", head->next->value);
head = head->next;
}
printf("\n");
}
int inserthead(A head, int x)
{   
A newnode = (A)malloc(sizeof(struct Node));
    if (NULL == newnode)
{
return -1;
}
newnode->value = x;
    newnode->next = head->next;
head->next = newnode;
}
int length(A head)
{   
int count = 0;
while (NULL != head->next)
{
count++;
head = head->next;
}
return count;
}
int delete(A head, int index)
{
A temp;
int i;
    for (i = 0; i < index - 1; i++)
{
head = head->next;
}
temp = head->next->next;
free(head->next);
head->next = temp;
return 0;
}
int insert2(A head, int value, int index)
{
int i;
A newnode;
newnode = (A)malloc(sizeof(struct Node));
newnode->value = value;
if (index < 0 || index > length(head))
{
printf("out of range\n");
}
else
{  
for (i = 0; i < index; i++)
{
head = head->next;
}
newnode->next = head->next;
head->next = newnode;
}
}
int search(A head, int value)
{
A temp;
    int len = length(head);
int i = 0;
    for (i = 0; i < len; i++)
{      
           if (value == head->next->value)
  {
temp = head->next->next;
free(head->next);
head->next = temp;
  }
  else
  {
  head = head->next;
  }

return 0;
}
void  querty(A head, int value)
{
    int i,count = 0;
int len = length(head);
for (i = 0; i < len; i++)
{ if (head->next->value == value)
{
printf("%d  is at %d\n ", value, i);
count++;
}
head = head->next;
}
if (count == 0)
printf("not found");
}
void queriy(A head, int x)
{
int len = length(head);
int i,count = 0;
for (i = 0; i < len; i++)
{
if (x == i)
printf("the %d  is %d", x, head->next->value);
count++;
head = head->next;
}
if (0 == count)
{
printf("not found");
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值