/*linklist.h*/#pragma once#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>typedefint ElemType;//定义数据元素类型为inttypedefstruct LNode {//线性表的链式存储结构定义
ElemType data;struct LNode* next;}LNode,*LinkList;//建立带头节点的单链表L,输入n个元素的值
LinkList createLinkList(int n){
LNode *L,*q,*p;
L =(LNode*)malloc(sizeof(LNode));
L->next =NULL;//链表L的头的数据是空的,只有一个指针,方便后面的插入/删除
q = L;for(int i =0; i < n; i++){
p =(LNode*)malloc(sizeof(LNode));printf("请输入第%d个值:", i +1);scanf("%d",&p->data);
p->next =NULL;
q->next = p;//将当前结点的next指针指向p
q = p;//将当前结点更新为p}return L;}//打印表中各元素的值voidprintLinkList(LinkList L){
LNode* p;
p = L->next;printf("\n单链表中元素为:");while(p){printf("%d ", p->data);
p = p->next;}printf("\n");}//在带头节点的单链表L中的i位置插入元素e,成功返回1,不成功返回0intinsertLinkList(LinkList L,int i, ElemType e){
LNode *p,*q;
p = L;int j =0;while(p&&j < i -1){//不断移动游标p,直到指向要插入的前一个位置
p = p->next;//由于L的数据是空的,所以这里直接略掉了头节点
j++;}if(!p || j > i -1){printf("插入元素越界!\n");return0;}
q =(LNode*)malloc(sizeof(LNode));
q->data = e;
q->next = p->next;//将新增元素的指针指向游标p的下一个元素
p->next = q;//将游标p的指针指向新增元素return1;}//在带头节点的单链表L中删除第i个元素,并由e返回其值,成功则返回1,失败返回0intdeletLinkList(LinkList L,int i, ElemType* e){
LNode *p,*q;int j =0;
p = L;while(p&&j < i -1){//不断移动游标p,直到指向要删除的前一个位置
p = p->next;
j++;}if(!p || j > i -1){if(!p || j > i -1){printf("删除元素越界!\n");return0;}}
q = p->next;//q表示要删除的元素*e = q->data;//获取要删除的元素的值
p->next = q->next;//游标p指向要删除元素的下一个位置free(q);//释放已删除元素的空间return1;}//在带头节点的单链表L中查找与给定元素e相同的位序intlocateLinkList(LinkList L, ElemType e){int i =0;
LNode* p;
p = L->next;while(p&&p->data != e){
p = p->next;
i++;}if(p->data != e)return0;return++i;}
/*main.cpp*/#include"linklist.h"intmain(void){
LinkList L;int n, i, e, state;printf("请输入创建链表的长度:");scanf("%d",&n);
L =createLinkList(n);printLinkList(L);printf("\n请选择插入元素位置:");scanf("%d",&i);printf("请选择插入元素值:");scanf("%d",&e);
state =insertLinkList(L, i, e);//在第4个元素位置插入7if(state){printf("插入成功!链表中元素为:");printLinkList(L);}else{printf("插入失败!");return0;}printf("\n请选择删除元素位置:");scanf("%d",&i);
state =deletLinkList(L, i,&e);//删除第3个元素if(state){printf("删除成功!删除的元素为%d.\n", e);printLinkList(L);}else{printf("删除失败!");return0;}printf("\n请输入需要查找的元素:");scanf("%d",&e);
i =locateLinkList(L, e);if(state)printf("该元素在线性表中的位序为%d.\n", i);elseprintf("该元素在链表中不存在!");return1;}