#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef struct Lnode
{
ElemType data; // 数据域
struct Lnode *next; // 指针域:指向自身的后继
}LNode, *LinkList; // LNode等价于struct Lnode,LinkList等价于struct Lnode*
LinkList INIT_link(LinkList H); // 头指针
int Create_link(LinkList H);
int OUT_link(LinkList H);
int Search_link(LinkList H, int pos);
int Delete_link(LinkList H, int pos, ElemType *e); // 第三个参数是可选参数,用于返回主函数要删除的数
int Insert_link(LinkList H, int pos, ElemType e);
int main()
{
LinkList head=NULL; // 头指针为空
int pos;
ElemType e;
int n;
head = INIT_link(head);
printf("输入数字,以-1结束:\n");
Create_link(head);
printf("\n输出为:\n");
printf("\n");
OUT_link(head);
printf("\n输入要查找的位置:\n");
scanf("%d", &pos);
printf("这个位置的数是:\n");
Search_link(head, pos);
printf("\n输入要删除的位置:\n");
scanf("%d", &pos);
Delete_link(head, pos, &e);
printf("\n输出为:\n");
OUT_link(head);
return OK; // 运行成功,下同
}
LinkList INIT_link(LinkList H) // 初始化链表,返回指针类型
{
H = (LNode*)malloc(sizeof(LNode)); // 动态分配空间
if(!H) return NULL; // 空间分配失败就返回空
H->next = NULL; // 头指针设为空
return H;
}
int Create_link(LinkList H) // 创建指针
{
LinkList p, tail=H; // tail用于连接节点的指针
ElemType m;
int pos;
int i;
while(scanf("%d", &m)&&m!=-1) // 以-1结束
{
p = (LNode*)malloc(sizeof(LNode)); // 分配空间,创建新的节点
if(!p) return ERROR;
p->data = m; // 数据域
p->next = NULL; // 指针域
tail->next = p; // 连接下一个新节点
tail = p;
}
return OK;
}
int OUT_link(LinkList H)
{
LinkList p=H->next;
if(H==NULL) return ERROR; // 如果H为空就跳出
while(p)
{
printf("%d ", p->data);
p = p->next;
}
return OK;
}
int Search_link(LinkList H, int pos)
{
LinkList p=H->next;
int i=1;
if(H==NULL||pos<1) return ERROR; // pos或H为空就返回0
while(p&&i<pos) // 一直寻找到pos的位置才跳出
{
i++;
p = p->next;
}
if(p==NULL) // 若p为空,证明不存在
return ERROR;
else
printf("%d", p->data);
return OK;
}
int Delete_link(LinkList H, int pos, ElemType *e)
{
LinkList p=H->next,s;
int i=1;
if(H==NULL||pos<1) return ERROR;
while(p&&i<pos-1)
{
i++;
p = p->next;
}
if(p==NULL)
return ERROR;
s = p->next; // 设置中间指定
p->next = s->next; // 把要连接删除的那个节点值指针指向删除节点指针的下一个
*e = s->data;
free(s); // 释放
return OK;
}
2_单链表-查找删除
最新推荐文章于 2023-10-06 22:35:42 发布