#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList CreateList(int n) //构建单链表
{
LinkList L,p,q;
int i;
L=(LNode*)malloc(sizeof(LNode));
if(!L){
printf("空间开辟失败,程序退出!");
exit(!0);
}
L->next=NULL;
q=L;
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(LNode));
printf("请输入第%d个元素的值:",i);
scanf("%d",&(p->data));
p->next=NULL;
q->next=p;
q=p;
}
return L;
}
int selectElem(LNode * p,int elem){ //查找读取元素的位置
LNode * t=p;
int i=1;
while (t->next) {
t=t->next;
if (t->data==elem) {
return i;
}
i++;
}
return -1;
}
LNode * insertElem(LNode * p){ //插入元素
LNode * temp=p; //创建临时结点temp
int add,elem;
printf("\n请输入插入节点的位序:");
scanf("%d",&add);
for (int i=1; i<add; i++) { //首先找到要插入位置的上一个结点
if (temp==NULL) {
printf("插入的位序无效!\n");
return p;
}
temp=temp->next;
}
printf("请输入插入元素的值:");
scanf("%d",&elem);
LNode * c=(LNode*)malloc(sizeof(LNode)); //创建插入结点c
c->data=elem;
c->next=temp->next; //向链表中插入结点
temp->next=c;
return p;
}
LNode * delElem(LNode * p,int add){ //删除元素
LNode * temp=p;
for (int i=1; i<add; i++) { //temp指向被删除结点的上一个结点
if(temp == NULL) {
printf("删除的位序无效!\n");
}
temp=temp->next;
}
LNode * del=temp->next; //单独设置一个指针指向被删除结点,以防丢失
temp->next=temp->next->next; //删除某个结点的方法就是更改前一个结点的指针域
free(del); //手动释放该结点,防止内存泄漏
return p;
}
void Print(LinkList h) //遍历输入链表元素
{
LinkList p=h->next;
while(p!=NULL){
printf("%d-> ",p->data);
p=p->next;
}
}
int main()
{
LinkList Head=NULL;
int n;
printf("创建链表\n");
printf("请输入链表的长度:");
scanf("%d",&n);
Head = CreateList(n);
printf("链表中元素的值为:");
Print(Head);
printf("\n\n读取元素");
printf("\n请输入读取的元素:");
int elem;
scanf("%d",&elem);
int address=selectElem(Head, elem);
if (address==-1) {
printf("\n链表中没有查找到%d的元素! \n",elem);
}else{
printf("元素 %d 的在链表中的位序为:%d\n",elem, address);
}
printf("\n插入元素");
Head=insertElem(Head); //插入元素
printf("链表中元素的值为:");
Print(Head);
printf("\n\n删除元素");
printf("\n请输入删除元素的位序:");
int add;
scanf("%d",&add);
Head=delElem(Head, add);
printf("链表中元素的值为:");
Print(Head);
printf("\n\n");
system("pause");
return 0;
}
C语言—单链表
最新推荐文章于 2025-04-11 16:44:55 发布