#include<stdio.h>
#include<stdlib.h>
typedef int Status;
typedef int Datatype;
typedef struct LNode{
Datatype data;
struct LNode *next;
}LNode,*LinkList;//新节点
LNode *MakeNode(Datatype e){
LNode *s = (LNode*)malloc(sizeof(LNode));
if(s != NULL){
s->data = e;
}
return s;
}
Status InitList_L(LinkList &L){
L = MakeNode(0);
if(L == NULL){
printf("存储空间分配失败");
}
L->next = NULL;
return 1;
}
void PrintfList(LinkList L){
printf("L ");
LNode *p = L;
while (p->next != NULL){
p = p->next;
printf("=>%d",p->data);//p->data 只是一个元素
}
printf("=>NULL");
}
Status ListInsert(LinkList &L,int i,Datatype e){//第i个节点插入
int count = 0;
LNode *p = L;
while(p->next != NULL&&count<i-1) {
p = p->next;
count++;
}
//找到插入位置退出,在i处插入,则用p = i-1->next来代表插入位置
if(p == NULL || count > i-1){
return 0;
}
LNode *s = MakeNode(e); //此处s与l同义
if(s == NULL){
printf("存储空间分配失败");
}
s->next = p->next;//让p的后继只向头结点
p->next = s; //将新增的s链接到p后,s头结点,无值,没意义
return 1;
}
Status ListDelete(LinkList &L,int i,Datatype e){
int count = 0;
LNode *p = L;
while(p->next != NULL&&count<i-1) {
p = p->next;
count++;
}
if(p == NULL || count > i-1){
return 0;
}
LNode *q = p->next;
p->next = q->next;//让元素i的前驱与后继相链接
e = q->data;
return 1;
}
void ListFind_L(LinkList &L,int i,Datatype e) {
LNode *p = L;
int count = 1;
while(p->next != NULL && p->data != i ){
count++;
p = p->next;
}
if(p->data == i){
printf("在第%d的位置上\n",count);
}else{
printf("没有查到\n");
}
}
int main(){
LinkList L;
puts("*****inited*****");
InitList_L(L);
PrintfList(L);
int a[5];
puts("\n请输入5个数");
for(int i = 0;i<5;i++){
scanf("%d",&a[i]);
}
for(int i = 0;i<5;i++){
ListInsert(L,i+1,a[i]);
}
puts("\n******insert*****");
PrintfList(L);
puts("\n请输入要插入的一个数");
int count,address,address1;
scanf("%d",&count);
puts("\n请输入要插入到第几个位置");
scanf("%d",&address);
ListInsert(L,address,count);
PrintfList(L);
Datatype e;
puts("\n******delete*****");
puts("\n请输入要删除第几个位置数");
scanf("%d",&address1);
ListDelete(L,address1,e);
puts("\n删除后为:");
PrintfList(L);
puts("\n******find*****");
puts("\n输入你要查找的数");
int find;
scanf("%d",&find);
ListFind_L(L,find,e);
//puts("%d在第%d的位置上\n",find,address2);
//ListFind_L(LinkList &L,int i,e);
}
单链表的基本操作
最新推荐文章于 2024-08-24 00:57:01 发布