#include<stdio.h>
#include<stdlib.h>
typedef struct node{
int data;
struct node *next;
}node,*link;
node * init_list()
{
node * head;
head = (node*)malloc(sizeof(node));
head->next = NULL;
return head;
}
link insert_tail()
{
node * head, *rear;
node *s;
int data=0;
head = rear = init_list();
printf("输入-1表示输入结束:\n");
while (1)
{
s = init_list();
scanf("%d", &data);
if (data == -1)
{
break;
}
else
{
s->data = data;
s->next = rear->next;
rear->next = s;
rear = s;
}
}
return head;
}
int find_list(link l, int data)//查找是否有该数据
{
node *q;
q = l->next;
while (q!=NULL)
{
if (q->data == data)
{
printf("查找成功\n");
return data;
}
else{
printf("失败\n");
}
}
return data;
}
void printf_list(link l)
{
node * p;
p = l;
if (p == NULL)
{
return;
}
while (p->next)
{
p = p->next;
printf("%d ", p->data);
}
}
int findpos(link l, int data)//根据数据记录位置
{
node *q;
q = l;
int i = 0;
int p = 0;
while (q ->next)
{
if (q->data == data)//if后面不加else return 否则只可以找到第一个数据
{
q = q->next;
i++;
p = i;
printf("find:pos is:%d\n", p);
return 1;
}
}
printf("cant find!\n");
return -1;
}
node * find_pos(link l, int pos)//查找该位置的数据
{
node * temp;
int i = -1;//也可以等于0但对于后面插入或者删除第一个元素有影响
temp = l;
while (temp->next != NULL)
{
++i;
temp = temp->next;
if (i == pos)
{
printf("在该链表中找到了该位置的数据:%d\n", temp->data);
//printf("%d\n", temp->data);
return temp;
}
}
printf("位置输入有误\n");
return NULL;
}
link insert_pos(link l, int pos,int data)
{
node *p=find_pos(l, pos-1);//pos-1是在数据之前插入,若是第一个则在后面插入
//pos实在数据之后插入
node *s;
if (p == NULL)
{
printf("位置错误\n");
return NULL;
}
else{
s = init_list();
s->data = data;
s->next = p->next;
p->next = s;
return p;
}
}
link del_pos(link l, int pos)
{
node * tem = find_pos(l, pos-1);//pos-1删除的是pos的前一个元素
//pos是删除pos的后一个元素
//同样对第一个元素没用
node *s;
if (tem == NULL||tem->next==NULL)//保证链表不为空并且需要连接的下一个结点不为空
{
printf("位置错误\n");
return NULL;
}
else{
s = init_list();
s = tem->next;
tem->next = s->next;
free(s);
return tem;
}
}
int main()
{
link l;
l = init_list();
//l = insert_tail();
//printf_list(l);
link c = init_list();
c = insert_tail();
//insert_pos(l,1,2);
del_pos(c,2);
printf_list(c);
system("pause");
}
单链表插入和删除
最新推荐文章于 2024-03-28 17:22:18 发布