📄 chainoperate.c
字号:
#include <stdio.h>
#include <stdlib.h>
struct chain
{
int value;
struct chain *next;
};
struct chain *create()
{
struct chain *head, *tail, *p;
int x,i;
head = tail = NULL;
printf("请输入四个整型数据,然后回车:\n");
for(i= 0;i < 4; i++)
{
scanf("%d",&x);
p = (struct chain *)malloc (sizeof (struct chain));
p->value = x;
p->next = NULL;
if(head == NULL)
head = tail = p;
else
tail = tail ->next = p;
}
return head;
}
struct chain *inlink(head,a,b)
struct chain *head;
int a, b;
{
struct chain *p, *q, *s;
s = (struct chain *)malloc(sizeof(struct chain));
s->value = b;
/*空表插入*/
if(head == NULL)
{
head = s;
s->next = NULL;
}
/*插入s结点作为新表头*/
if(head->value == a)
{
s->next = head;
head = s;
}
else
{
p = head;
/*遍历单链表,寻找数据域值为a的结点*/
while ((p->value != a)&&(p->next != NULL))
{
q = p;
p = p->next;
}
if(p->value == a) //找到数据域为a的结点
{
q->next = s;
s->next = p;
}
/*插入结点s作为表尾*/
else
{
p->next = s;
s->next = NULL;
}
}
return(head);
}
struct chain *dellink(head,a)
struct chain *head;
int a;
{
struct chain *p,*q;
if(head == NULL)
printf("空链表\n");
else if(head ->value == a)
/*链表的第一个结点即为a结点*/
{
p = head;
head = head->next;
}
else
{
p = head;
while ((p->value != a)&&(p->next != NULL))
/*在链表中搜索数据为a的结点*/
{
q = p;
p = p->next;
}
if(p->value != a)
/*在链表中无数据值为a的结点*/
printf("没有要删除的数据 %d\n",a);
else
{
q ->next = p->next;
free(p);
}
}
return(head);
}
void main()
{
struct chain *q,*head;
int a, b;
q = create();
head = q;
while(q) //显示链表
{
printf("%d\n",q->value);
q = q->next;
}
printf("请输入新插入的表元数据位于那个数据之前:");
scanf("%d",&a);
printf("\n 请输入要插入的表元数据: ");
scanf("%d",&b);
q = inlink(head,a,b);
head = q;
while(q) //显示链表
{
printf("%d\n",q->value);
q = q->next;
}
printf("请输入要删除表元的数据: ");
scanf("%d",&a);
q = dellink(head,a);
while(q) //显示链表
{
printf("%d\n",q->value);
q = q->next;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -