/* Note:Your choice is C IDE */
#include "stdio.h"
#include "stdlib.h"
//结点结构体
typedef struct n
{
//数据域
union
{
char d[20];
int len;
};
struct n *next;//指针域
}list;
//创建头结点
list *cj()
{
list *h=malloc(sizeof(list));//申请内存0;
if(h!=NULL)
{
h->len=0;
h->next=h;
}
return h;
}
//输出函数
void shuchu(list *h)
{
list *p=h;
if(h->next==NULL)
{
printf("链表为空!\n");
}
else
{
printf("链表长度:%d\n链表数据如下:\n",h->len);
while((p=p->next)!=h)
{
printf("%s\t",p->d);
}
printf("\n");
}
}
//插入函数
void charu(list *p,list *s)
{
s->next=p->next;
p->next=s;
}
//删除函数
void shanchu(list *p)//删除p的后一个结点
{
list *q=p->next;//将待删除的结点保存
p->next=p->next->next;
free(q);
}
//输入函数
void shuru(list *h,int n)
{
int i;
list *p;
list *s=h;
for(i=1;i<=n;i++)
{
p=malloc(sizeof(list));
if(p==NULL)
{
printf("申请失败!\n");
}
else
{
printf("请输入第%d个结点的数据:",i);
scanf("%s",&p->d);
p->next=h;
s->next=p;//加入链表
s=p;//尾结点后移
h->len++;
}
}
}
//查找函数 定位查找
list *chazhao(list *h,int wz)
{
int i;
list *p=h;
for(i=0;i<wz;i++)//循环wz次找到结点
{
p=p->next;
}
return p;//返回你查找结点
}
//修改函数
void xiugai(list *h,int wz)
{
int i;
list *p=h;
for(i=0;i<wz;i++)
{
p=p->next;
}
printf("请输入修改数据:");
scanf("%s",&p->d);
}
void main()
{
int n,wz;
list *p,*q;
list *h=cj();//调用创建函数创建头结点
shuchu(h);//
printf("请输入结点个数:");
scanf("%d",&n);
shuru(h,n);
shuchu(h);
//插入函数 参数(链表、位置、插入结点)
p=malloc(sizeof(list));
if(p==NULL)
{
printf("申请内存失败!\n");
}
else
{
printf("请输入插入位置:");
scanf("%d",&wz);
printf("请输入插入数据:");
scanf("%s",&p->d);
p->next=NULL;
//调用查找函数,找到待插位置的前一个结点
q=chazhao(h,wz-1);
//调用插入函数
charu(q,p);
h->len++;
shuchu(h);
}
//删除函数
printf("请输入删除位置:");
scanf("%d",&wz);
//调用查找函数找到待删除结点前一个
q=chazhao(h,wz-1);
shanchu(q);
h->len--;
shuchu(h);
}
C语言循环链表
最新推荐文章于 2023-10-15 18:38:56 发布