#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
int e;
}LNode, *LinkList;
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
int e;
}LNode, *LinkList;
void CreateList(LinkList *L,int n)
{ /* 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表 */
int i;
LinkList p,q;
*L=(LinkList)malloc(sizeof(struct LNode)); /* 生成头结点 */
(*L)->next=NULL;
q=*L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
{ /* 正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表 */
int i;
LinkList p,q;
*L=(LinkList)malloc(sizeof(struct LNode)); /* 生成头结点 */
(*L)->next=NULL;
q=*L;
printf("请输入%d个数据\n",n);
for(i=1;i<=n;i++)
{
p=(LinkList)malloc(sizeof(struct LNode));
scanf("%d",&p->data);
q->next=p;
q=q->next;
}
p->next=NULL;
}
void GetElem(LinkList L, int i, int e){ /*查找链表中的第i个数*/
int j;
LinkList p;
printf("请输入要查找第几个数: \n");
scanf("%d", &i);
p = L->next;
j = 1;
while(p && j < i){
p = p->next;
++j;
}
if(!p || j > i)
return;
printf("第%d个数为:\n", i);
e = p->data;
printf("%d", e);
}
int j;
LinkList p;
printf("请输入要查找第几个数: \n");
scanf("%d", &i);
p = L->next;
j = 1;
while(p && j < i){
p = p->next;
++j;
}
if(!p || j > i)
return;
printf("第%d个数为:\n", i);
e = p->data;
printf("%d", e);
}
int main(){
int length = 0;
printf("请输入链表长度:\n");
scanf("%d", &length);
LinkList L;
CreateList(&L, length);
int i = 0;
LNode *first = L;
printf("操作前的链表:\n");
for(; i < length; i++){
first = first->next;
printf("%d ", first->data);
}
printf("\n");
int length = 0;
printf("请输入链表长度:\n");
scanf("%d", &length);
LinkList L;
CreateList(&L, length);
int i = 0;
LNode *first = L;
printf("操作前的链表:\n");
for(; i < length; i++){
first = first->next;
printf("%d ", first->data);
}
printf("\n");
int j, e;
GetElem(L, j, e);
printf("\n");
GetElem(L, j, e);
printf("\n");
/*在单链表中插入一个数*/
printf("请输入要插入的位置:\n");
int o,k,num1;
scanf("%d", &o);
LinkList p, s;
p = L; k = 0;
while (p && k < o - 1)
{
p = p->next;
++k;
}
if(!(p->next) || k > i-1)
return;
printf("请输入要插入的数:\n");
scanf("%d", &num1);
s = (LinkList)malloc(sizeof(LNode));
s->data = num1; s->next = p->next;
p->next = s;
LNode *first1 = L;
printf("操作后的链表:\n");
for(i = 0; i <= length; i++){
first1 = first1->next;
printf("%d ", first1->data);
}
printf("\n");
int o,k,num1;
scanf("%d", &o);
LinkList p, s;
p = L; k = 0;
while (p && k < o - 1)
{
p = p->next;
++k;
}
if(!(p->next) || k > i-1)
return;
printf("请输入要插入的数:\n");
scanf("%d", &num1);
s = (LinkList)malloc(sizeof(LNode));
s->data = num1; s->next = p->next;
p->next = s;
LNode *first1 = L;
printf("操作后的链表:\n");
for(i = 0; i <= length; i++){
first1 = first1->next;
printf("%d ", first1->data);
}
printf("\n");
/*在单链表中删除一个数*/
LinkList p1,q;
int t, r, num2;
p1 = L;
t = 0;
printf("请输入要删除第几个数:\n");
scanf("%d", &r);
while(p1->next && t < r-1){
p1 = p1->next;
++t;
}
if(!(p1->next) || t > r-1){
return;
}
q = p1->next; p1->next = q->next;
num2 = q->data;
free(q);
printf("删除的数为: %d\n", num2);
LNode *first2 = L;
printf("操作后的链表:\n");
for(i = 0; i < length; i++){
first2 = first2->next;
printf("%d ", first2->data);
}
printf("\n");
}
int t, r, num2;
p1 = L;
t = 0;
printf("请输入要删除第几个数:\n");
scanf("%d", &r);
while(p1->next && t < r-1){
p1 = p1->next;
++t;
}
if(!(p1->next) || t > r-1){
return;
}
q = p1->next; p1->next = q->next;
num2 = q->data;
free(q);
printf("删除的数为: %d\n", num2);
LNode *first2 = L;
printf("操作后的链表:\n");
for(i = 0; i < length; i++){
first2 = first2->next;
printf("%d ", first2->data);
}
printf("\n");
}