1.产生20个1~200的随机数,并依次保存到带头结点的单链表中
2.计算单链表长度,并将结果存放在头结点的数据域中,然后输出单链表
3.能按值查找,按位查找
4.从单链表中删除与给定值x相等的所有结点,然后输出单链表
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
//1.产生20个1~200的随机数,并依次保存到带头结点的单链表中
//2.计算单链表长度,并将结果存放在头结点的数据域中,然后输出单链表
//3.能按值查找,按位查找
//4.从单链表中删除与给定值x相等的所有结点,然后输出单链表
typedef struct _Node
{
int data;
struct _Node *next;
}Node;
void printList(Node *head)
{
Node *p = head->next;
while(p != NULL)
{
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
void findIdx(Node *head,int data)
{
int idx = 0;
Node *p = head->next;
while(p!=NULL)
{
if(p->data == data)
{
printf("%d是第%d个节点\n",data,idx+1);
return;
}
p=p->next;
idx++;
}
printf("不存在值为%d的节点\n",data);
}
void findData(Node *head,int idx)
{
int i=1;
Node *p = head->next;
while(p != NULL && i<idx)
{
p = p->next;
i++;
}
if(i==idx)
{
printf("第%d个节点的值为%d\n",idx,p->data);
}
else
printf("没有第%d个节点\n",idx);
}
void remove(Node *head,int x)
{
Node *p = head;
while(p->next != NULL)
{
if(p->next->data == x)
{
Node *q = p->next;
p->next = p->next->next;
free(q);
head->data--;
}
else
p = p->next;
}
}
void createList(Node *head)
{
Node *p = head;
Node *q = NULL;
for(int i=0;i<20;i++)
{
q = (Node*)malloc(sizeof(Node));
q->data = rand()%200+1;
q->next = NULL;
p->next = q;
p = p->next;
}
head->data = 20;
}
int getNodeCount(Node *head)
{
return head->data;
}
int main()
{
Node head;
head.data = 0;
head.next = NULL;
//
srand((unsigned int)time(NULL));
createList(&head);
printList(&head);
//
int idx;
printf("输入搜索的节点序号(从1开始):");
scanf("%d",&idx);
findData(&head,idx);
int data;
printf("输入搜索的值:");
scanf("%d",&data);
findIdx(&head,data);
//
printf("输入删除的值:");
scanf("%d",&data);
remove(&head,data);
printList(&head);
printf("节点数量:%d\n",head.data);
return 0;
}