#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;//数据域
struct LNode* next;//指针域
}LNode,*LinkNode;
void Search(LinkNode Head);
void Insert(LinkNode Head);
void Delete(LinkNode Head);
//头插入
LinkNode HeadInsert()
{
printf("请输入数字-1结束:");
LinkNode Head,S;
Head = (LinkNode)malloc(sizeof(LNode));
Head->next = NULL;
int number;
scanf("%d",&number);
//头插入
while (number != -1) {
S = (LinkNode)malloc(sizeof(LNode));
S->data = number;
S->next = Head->next;
Head->next = S;
scanf("%d",&number);
}
//输出
LinkNode pt = Head->next;
while (pt != NULL) {
printf("%-2d",pt->data);
pt = pt->next;
}
printf("\n");
return Head;//返回头结点
}
//尾插入
void TailInsert()
{
LinkNode Head,S,Tail;
Head = (LinkNode)malloc(sizeof(LNode));
Head->next = NULL;
Tail = Head;
printf("请输入数字-1结束:");
int number;
scanf("%d",&number);
//插入
while (number != -1) {
S = (LinkNode)malloc(sizeof(LNode));
S->data = number;
Tail->next = S;
Tail = S;
scanf("%d",&number);
}
Tail->next = NULL;
//输出
LinkNode pt = Head->next;
while (pt != NULL) {
printf("%-2d",pt->data);
pt = pt->next;
}
printf("\n");
Search(Head);//查找
Insert(Head);//插入
Delete(Head);//删除
}
//查找元素
void Search(LinkNode Head)
{
LinkNode S = Head->next;
int number;
printf("请输入你要找的元素:");
scanf("%d",&number);
int flag = 0;
int i = 1;
while(S)
{
if(S->data == number)
{
flag = i;
}
i++;
S = S->next;
}
if(flag == 0)printf("不存在这个元素\n");
else printf("这个元素在第%d个位置\n",flag);
}
//插入元素
void Insert(LinkNode Head)
{
printf("请输入插入位置及元素");
int index,number;
scanf("%d%d",&index,&number);
//寻找节点
LinkNode S = Head->next;
int i = 1;
while (S) {
i++;
S = S->next;
if(i == index)break;
}
LinkNode temp = (LinkNode)malloc(sizeof(LNode));
temp->data = number;
//第index个元素后插入
temp->next = S->next;
S->next = temp;
//遍历
LinkNode pt = Head->next;
while (pt != NULL) {
printf("%-2d",pt->data);
pt = pt->next;
}
printf("\n");
}
void Delete(LinkNode Head)
{
LinkNode S = Head;
printf("请输入您要删除的元素:");
int number;
scanf("%d",&number);
while (S) {
if(number == S->next->data)
{
S->next = S->next->next;
break;
}
}
//遍历
LinkNode pt = Head->next;
while (pt != NULL) {
printf("%-2d",pt->data);
pt = pt->next;
}
printf("\n");
}
int main(int argc, char const *argv[]) {
//HeadInsert();
TailInsert();
return 0;
}
王道考研 ++++ 链表(C语言 头插、尾插、位置插入、查询、删除)
最新推荐文章于 2024-03-21 21:15:25 发布