#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef struct Lnode{
int data; //数据域
struct Lnode *next; //指针域
}Lnode,*Linklist; //*Linklist为Lnode类型的指针
int CreateList(Linklist L,int n) //头插法
{
Linklist p,q;
p = L;//第一步,取到头结点,两个指针指向同一内存,改变p指向的内存,L指向的内存不变,L仍为头结点
printf("请输入%d个数:\n", n);
for (int i = 1; i <= n; i++)
{
q = (Linklist)malloc(sizeof(int));
if (!p)
{
printf("p的初始化出现问题!\n");
return 0;
}
scanf("%d", &q->data);
q->next = p->next;//第二步链接两个结点
p->next = q;//第二步链接两个结点
p = q;//关键的一步,更换位置,进行下次循环
}
return 1;
}
int ListInsert(Linklist *L,int i,int *e)//单链表的插入在第i个位置插入元素e
{
int j;
Lnode *p;
p=L;
j=0;
while(p->next&&j<i-1)//遍历并且进行第i-1个位置的查找
{
p=p->next;
++j;
}
if(!p||j>i-1)//如果找不到的话就返回error
{
return ERROR;
}
Lnode *S=(Linklist)malloc(sizeof(Lnode));
S->data=e;
S->next=p->next;
p->next=S;
}
int ListDelete(Linklist *L,int i)//单链表的删除
{
int j;
Lnode *p,*q;
p=L;
j=0;
while(p->next&&j<i-1)//寻找第i-1个元素,应该是找
{
p=p->next;
++j;
}
if(!p||j>i-1)//删除位置不合理,找不到元素
{
return ERROR;
}
q=p->next;//删除并释放结点
p->next=q->next;
free(q);
}
Lnode *Locate(Linklist L,int i,int a)
{ //按序号查找 定位
Lnode *p;
int j;
if(i==0||i>a)
{
printf("查找位置错误");
return L;
}
p=L->next;
for(j=0;j<i;j++)
{
p=p->next;
}
printf("%d",p->data);
return 0;
}
int getLinklist(Linklist L,int a){ //打印链表
int n=a;
if(!L->next)
{
printf("链表没有节点,不能输出");
return 0;
}
Linklist p;
p=L->next;
for(int i=0;i<n;i++)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}
int main()
{
int a,b;
Linklist *L=(Linklist*)malloc(sizeof(Lnode));
printf("请问您想输入几个数:");
scanf("%d",&a);
CreateList(L,a);
int i,select;
int *e;
printf("宏立:请输入您想完成的操作\n");
printf("插入操作请出入1;删除操作请输入2,按序号查找请输入3,\n");
scanf("%d",&select);
if(select==1)
{
printf("请输入想插入的位置和想插入的数");
scanf("%d %d",&i,&e);
ListInsert(L,i,e);
getLinklist(L,a+1);
}
if(select==2)
{
printf("请输入想删除的位置");
scanf("%d",&i);
ListDelete(L,i);
getLinklist(L,a-1);
}
if(select==3)
{printf("请输入你要查找的数的序号:");
scanf("%d",&i);
Lnode *Locate(L,i,a);
}
return 0;
}
为什么按序号查找那个函数读不进去啊