基本要求:
(1)实现单链表的创建;(2)实现单链表的插入;(3)实现单链表的删除
(4)实现单链表的查找;(5)实现单链表的显示;
实验源代码
#include <stdlib.h>
#include <stdio.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
int createList(LinkList *L, int n);
int getElem(LinkList L,int i);
int print_List(LinkList head);
int listInsert(LinkList L,int i,ElemType e);
int listDelete(LinkList L,int i);
int createList(LinkList *L,int n){
LinkList newLNode,head,temp;
int i;
ElemType data;
head=(LinkList)malloc(sizeof(LNode));
temp=head;
for(i=0;i<n;i++){
newLNode=(LinkList)malloc(sizeof(LNode));
printf("输入第%d个元素的值",i+1);
scanf("%d",&data);
newLNode->data=data;
temp->next=newLNode;
temp=newLNode;
}
newLNode->next=NULL;
*L=head;
return 0;
}
int print_List(LinkList head) {
printf("当前链表:");
LinkList temp;
if(head==NULL||head->next==NULL)
{
printf("空表n");
}
temp=head;
while(temp->next) {
printf("%d",temp->next->data);
temp=temp->next;
}
return 0;
}
int getElem(LinkList L,int i){
LinkList temp;
temp=L;
for(int j=1;j<=i;j++){
temp=temp->next;
}
return temp->data;
}
int listInsert(LinkList L,int i,ElemType e){
LinkList p=L;
int j=0;
while(p&&j<i-1){
p=p->next;
++j;
}
if(!p||j>i-1)
return -1;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return 0;
}
int listDelete(LinkList L,int i){
LinkList p,q;
p=L;
int j=0;
while(p->next&&j<i-1){
p=p->next;
++j;
}
if(!(p->next) || j>i-1)
return -1;
q=p->next;
p->next=q->next;
ElemType e=q->data;
free(q);
return e;
}
int main()
{
printf("创建链表,请输入链表长度:");
int length;
scanf("%d",&length);
LinkList L;
createList(&L,length);
print_List(L);
printf("\n");
printf("需要获取第几个元素?");
int elemIndex;
scanf("%d",&elemIndex);
int get_e=getElem(L,elemIndex);
printf("第%d个元素的值为%d",elemIndex,get_e);
printf("\n");
print_List(L);
printf("\n");
printf("插入的位置:");
int inserIndex;
scanf("%d",&inserIndex);
printf("插入的数据:");
int inserData;
scanf("%d",&inserData);
listInsert(L,inserIndex,inserData);
printf("\n");
print_List(L);
printf("\n");
printf("删除第几个元素?");
int deleIndex;
scanf("%d",&deleIndex);
ElemType dele_e=listDelete(L,deleIndex);
printf("已删除元素:%d",dele_e);
printf("\n");
print_List(L);
system("pause");
return 0;
}