#include<stdio.h>
#include<stdlib.h>
#define MAX 50
struct lnode
{
int data;
struct lnode *next;
};
//求链表的长度 不包含头结点
int length(struct lnode node)
{
struct lnode*p;
p=&node;
int i=0;
while(p->next!=NULL)
{ p=p->next;
i++;
}
return i;
}
//初始化头
int inithead(struct lnode *p)
{
int d;
printf("请输入头元素的内容:\n");
scanf("%d",&d);
p->data=d;
p->next=NULL;
return 0;
}
struct lnode * insert(struct lnode *node,int m)
{
struct lnode *p=(struct lnode *)malloc(sizeof(struct lnode));
node->next=p;
p->data=m;
p->next=NULL;
return p;
}
//按序号查找节点值
struct lnode * search(struct lnode node,int n)
{
struct lnode *p;
p=&node;
for(int i=1; i<n; i++)
p=p->next;
return p;
}
int printlnode(struct lnode node)
{
struct lnode*p;
p=&node;
int i=0;
printf("第%d内容为%d\n",i+1,p->data);
while(p->next!=NULL)
{ p=p->next;
i++;
printf("第%d%内容为%d\n",i+1,p->data);
}
return i;
}
int deletenode(struct lnode node,int m)
{
struct lnode *p1=search(node,m-1);
struct lnode *p2=p1->next->next;
struct lnode *p3=p1->next;
p1->next=p2;
free(p3);
}
int main()
{
struct lnode head;
struct lnode *curr;
struct lnode *end;
curr=&head;
int d;
int len;
int deleteid;
int searchid;
inithead(&head);
printf("head->data:%d\n",head.data);
//输入单链表的内容
printf("请输入插入单链表的长度:\n");
scanf("%d",&len);
printf("请输入单链表的内容");
for(int i=0; i<len; i++)
{ scanf("%d",&d);
curr=insert(curr,d);
}
/*
//输入链表的内容
d=getchar();
while(d!='#')
{
if(d>='0'&&d<='9')
{curr=insert(curr,d-'0');d=getchar();}
else d=getchar();
}
*/
//打印单链表
printlnode(head);
printf("\n链表的长度为:%d\n",length(head));
printf("请输入你要删除的序号:\n");
scanf("%d",&deleteid);
deletenode(head,deleteid);
printlnode(head);
//查找单链表
printf("请输入你要查找的序号:\n");
scanf("%d",&searchid);
printf("\n你查找的内容为:%d",search(head,searchid)->data);
return 0;
}
单链表实现
最新推荐文章于 2022-10-13 20:00:00 发布