//(C语言)链表创建,输出,结点地址取值,值取结点地址,插入新值,删除值
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define error 0
typedef struct Node
{
int data;
struct Node *next;
} LNode, *LinkList;
LinkList CreateList_R(LNode *L, int n)
{
int i;
LNode *p, *r;
L->next = NULL; //建立一个带头结点的空链表
r = L; //尾指针r指向头结点
for (i = 0; i < n; i++)
{
p = (LNode *)malloc(sizeof(LNode));
printf("请输入第%d个数", i + 1);
scanf("%d", &p->data);
p->next = NULL; //建立一个带头结点的空链表
r->next = p;
r = p;
}
r->next = L;
return L;
}
void print(LNode *L)
{
LNode *r;
r = L;
while (r->next != L) //r所指节点不能为空
{
r = r->next; //r后移指向下一个节点
printf("%d ", r->data); //输出r所指的节点的值
}
printf("\n");
}
LinkList GetElem(LNode *L, int i, int e)
{
int j = 1;
LNode *p;
p = L->next;
while (p->next != L && j < i)
{
p = p->next;
j++;
}
if (!p || j > i)
{
printf("error");
return error;
}
e = p->data;
printf("输出要找的数第%d个数:%d\n", i, e);
return 0;
}
LinkList LocateElem(LNode *L, int e)
{
LNode *p;
int i = 1;
p = L->next;
while (p && p->data != e)
{
p = p->next;
i++;
}
printf("要查找的数据的结点地址为:%d\n", i);
return p;
}
LinkList ListInsert(LNode *L, int i, int e)
{
LNode *p;
int j = 0;
p = L;
while (p && (j < i - 1))
{
p = p->next;
j++;
}
if (!p || j > i - 1)
{
return error;
}
LNode *s;
s = (LNode *)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
printf("输出插入数后的新链表:");
LNode *r;
r = L;
while (r->next != L) //r所指节点不能为空
{
r = r->next; //r后移指向下一个节点
printf("%d ", r->data); //输出r所指的节点的值
}
printf("\n");
return 0;
}
LinkList ListDelete(LNode *L, int i)
{
LNode *p, *q;
p = L;
int j = 0;
while ((p->next) && (j < i - 1))
{
p = p->next;
j++;
}
q = p->next;
p->next = q->next;
free(q);
printf("输出删除数后的新链表:");
LNode *r;
r = L;
while (r->next != L) //r所指节点不能为空
{
r = r->next; //r后移指向下一个节点
printf("%d ", r->data); //输出r所指的节点的值
}
printf("\n");
return 0;
}
int main()
{
LNode *A;
int length_A, i, e;
A = (LNode *)malloc(sizeof(LNode));
printf("请输入需要输入的数据个数:");
scanf("%d", &length_A);
CreateList_R(A, length_A);
printf("输出刚才输入的数据:");
print(A);
printf("请输入需要取的数据序号:");
scanf("%d", &i);
GetElem(A, i, e);
printf("请输入需要取的数据值:");
scanf("%d", &e);
LocateElem(A, e);
printf("输入需要插入的数据的位置和值(空格隔开):");
scanf("%d %d", &i, &e);
ListInsert(A, i, e);
printf("输入需要删除的数据的位置:");
scanf("%d", &i);
ListDelete(A, i);
return 0;
}