#include <bits/stdc++.h>
using namespace std;
#define LEN sizeof(LINKLIST)
typedef struct node //定义单链表
{
int date;
struct node *next;
} LINKLIST;
LINKLIST *CreateList() //创建单链表
{
LINKLIST *H;
H = (LINKLIST *)malloc(LEN);
if (H == NULL)
return H;
H->date = -1;
H->next = NULL;
return H;
}
LINKLIST *FindorderList(LINKLIST *H, int i) //按序号查找
{
int j;
LINKLIST *p;
j = 0;
p = H;
while (j < i && p->next != NULL)
{
p = p->next;
j++;
}
if (j == i) //找到了该序号
{
printf("结点号%d所指向的数值为%d\n", i, p->date);
return p;
} //输出该值并且返回该序号所在的位置
else
{
printf("查找失败!\n");
return NULL; //查找失败
}
}
LINKLIST *FindnumList(LINKLIST *H, int x) //按数值查找
{
LINKLIST *p;
p = H;
while (p->date != x && p->next != NULL)
{
p = p->next;
}
if (p->date == x)
{
printf("已找到的数值为%d\n", p->date);
return p;
}
else
{
printf("查找失败!\n");
return NULL; //查找失败
}
}
int InsertList(LINKLIST *H, int i, int x) //单链表的插入
{
LINKLIST *p, *t;
p = FindorderList(H, i); // p指向插入的位置
if (p == NULL)
{
printf("插入失败!\n");
return 0;
}
t = (LINKLIST *)malloc(LEN); //生成新的结点
t->date = x;
t->next = p->next; //插入新结点
p->next = t;
printf("插入成功!\n已在结点号为%d的位置插入数值%d\n", i, x);
return 1;
}
int main() //主函数
{
int n;
// LINKLIST L;
LINKLIST *H;
H = CreateList(); //首先建立一个单链表
while (1)
{
printf("1:插入一个数值\n2:按序号查找\n3:按数值查找\n4:退出单链表系统\n");
printf("请输入需要的功能:\n");
scanf("%d", &n);
switch (n)
{
case 1:
{
int i;
int x;
printf("请输入插入的位置和数值:\n");
scanf("%d %d", &i, &x);
InsertList(H, i, x);
break;
}
case 2:
{
int i;
printf("请输入要查找的结点号:\n");
scanf("%d", &i);
FindorderList(H, i);
break;
}
case 3:
{
int x;
printf("请输入要查找的数值:\n");
scanf("%d", &x);
FindnumList(H, x);
break;
}
case 4: //退出单链表系统
{
exit(0);
break;
}
default:
printf("输入错误\n");
break;
}
}
return 0;
}
//单链表的创建,插入,按值查找和按结点号查找。
单链表的一些基本操作
最新推荐文章于 2024-08-03 21:15:16 发布