69,382
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#define null 0
struct node
{
int data;
struct node *next;
};
struct node *p, *L, *s, *q;
int n, e;
creater (int n) //创建有n个元素的链表,顺序插入结点
{
int i, k;
L = (struct node *) malloc (sizeof (struct node));
L->next = null;
s = L;
for (i = 1; i <= n; i++)
{
printf ("input %d:", i);
scanf ("%d", &k);
p = (struct node *) malloc (sizeof (struct node));
p->data = k;
s->next = p;
s = p;
}
p->next = null;
}
print () //按顺序输出L中的元素
{
struct node *p;
p = L->next;
while (p)
{
printf ("%d ", p->data);
p = p->next;
}
}
delete (int i) //删除L中第i个元素,并把删除的元素输出
{
int e;
int j = 0;
struct node *p;
if (i < 1 || i > n)
printf ("error\n");
else
{
p = L; //L为头结点
while (j < i - 1) //找到第i个结点的前驱结点,循环i-1次,从头结点开始查找
{
p = p->next;
j++;
}
q = p->next; //删除第i个元素
p->next = q->next;
e = q->data;
free (q); //释放结点
printf ("\ndeleted is:%d\n", e);
}
}
insert (int i, int x)
{
int j;
if (i < 1 || i > n + 1)
printf ("insert error!\n");
else
{
j = 0, p = L; //L为头结点
while (j < i - 1) //查找第i个元素的前驱结点
{
p = p->next;
j++;
}
q = (struct node *) malloc (sizeof (struct node)); //动态分配新结点
q->next = p->next; //插入新结点
q->data = x;
p->next = q;
}
}
int main ()
{
int i, j, x;
printf ("\nn=");
scanf ("%d", &n);
creater (n);
printf ("\nnew link:");
print ();
printf ("\ndelete position: ");
scanf ("%d", &i);
delete (i);
printf ("\nafter deleted,the link is:");
print ();
printf ("\ninsert new element:");
scanf ("%d", &x);
printf ("\n insert position:");
scanf ("%d", &i);
insert (i, x);
printf ("atfer insertde,the new link is:");
print ();
getchar();
return 0;
}