#include<stdio.h>
#include<stdlib.h>
typedef struct Node *LinkList;
typedef int ElemType;
//链表存储结构定义
struct Node
{
ElemType data;
struct Node *next;
};
//初始化循环链表
LinkList InitList(LinkList head)
{
LinkList p1;
int temp, m = 1;
head = (LinkList)malloc(sizeof(Node));
if (head == NULL)
exit(0);
head->next = head;
//头插法(输入-1停止输入)
/*while (1)
{
printf("请输入倒数第%d个数据:", m);
scanf("%d", &temp);
if (temp == -1)
break;
p1 = (LinkList)malloc(sizeof(Node));
p1->data = temp;
p1->next = head->next;
head->next = p1;
m++;
}*/
//尾插法
LinkList p2=head;
while(1)
{
printf("请输入第%d个数据:",m);
scanf("%d",&temp);
if(temp==-1)
break;
p1=(LinkList)malloc(sizeof(Node));
p1->data=temp;
p1->next=head;
p2->next=p1;
p2=p1;
m++;
}
return head;
}
//链表长度
int ListLength(LinkList head)
{
LinkList p;
int t = 1;
p = (LinkList)malloc(sizeof(Node));
p = head->next;
if(p==head)
t=0;
while (p->next != head)
{
p = p->next;
t++;
}
return t;
}
//插入节点
//插入第i个位置
LinkList ListInsert(LinkList head,int i)
{
LinkList p,p1;
p1=head;
int temp;
if(i<1&&i>ListLength(head))
{
printf("无法插入");
return head;
}
else
{
for(int j=0;j<i-1;j++)
{
p1=p1->next;
}
printf("请输入插入节点的数据");
scanf("%d",&temp);
p=(LinkList)malloc(sizeof(Node));
p->data=temp;
p->next=p1->next;
p1->next=p;
return head;
}
}
//遍历输出
void PrintList(LinkList head)
{
LinkList target;
int i=1;
for(target=head->next;target!=head;target=target->next,i++)
{
printf("第%d个数据为%d\n",i,target->data);
}
}
int main()
{
LinkList L;
int t,i;
L = InitList(L);
t = ListLength(L);
printf("%d\n", t);
printf("输入要插入的位置");
scanf("%d",&i);
L=ListInsert(L,i);
PrintList(L);
return 0;
}
C语言循环单链表
最新推荐文章于 2024-01-21 20:24:54 发布