函数说明😃:
LinkList List_HeadInsert(LinkList& L):用头插法建立单链表
LinkList List_TailInsert(LinkList& L):用尾插法建立单链表
LNode * GetElem(LinkList L, int i):按照序号查找结点值
LNode * LocateElem(LinkList L,int i) :按值查找表结点
bool InsetElem(LinkList& L, int i, int e) :插入结点
bool DeleteElem(LinkList& L, int i) :删除结点
void ListShow(SqList L) :打印单链表中的元素
代码😃:
#include <stdlib.h>
#include <stdio.h>
typedef struct LNode {int data;struct LNode* next;
}LNode,*LinkList;
//用头插法建立单链表
LinkList List_HeadInsert(LinkList& L) {LNode* s;int x;L = (LinkList)malloc(sizeof(LNode));if (L == NULL) {printf("内存分配不成功!\n");}else {L->next = NULL;printf("请输入需要插入的元素(输入999表示结束)\n");scanf_s("%d", &x);while (x != 999) {s = (LNode*)malloc(sizeof(LNode));if (s == NULL) {printf("内存分配不成功!\n");}else {s->data = x;s->next = L->next;L->next = s;printf("请输入需要插入的元素(输入999表示结束)\n");scanf_s("%d", &x);}}}return L;
}
//用尾插法建立单链表
LinkList List_TailInsert(LinkList& L) {int x;L = (LinkList)malloc(sizeof(LNode));if (L == NULL) {printf("内存分配不成功!\n");}else {LNode* s, * r = L;printf("请输入需要插入的元素(输入999表示结束)\n");scanf_s("%d", &x);while (x != 999) {s = (LNode*)malloc(sizeof(LNode));if (s == NULL) {printf("内存分配不成功!\n");}else {s->data = x;r->next = s;r = s;printf("请输入需要插入的元素(输入999表示结束)\n");scanf_s("%d", &x);}}r->data = NULL;}return L;
}//按照序号查找结点值
LNode* GetElem(LinkList L, int i) {int j = 1;LNode* p = L->next;if (i == 0) return L;if (i < 1)return NULL;while (p&&j<i){p = p->next;j++;}return p;}//按值查找表结点
LNode* LocateElem(LinkList L,int i) {LNode* p = L->next;while (p&&p->data!=i) {p = p->next;}return p;}
//插入结点
bool InsetElem(LinkList& L, int i, int e) {LNode* p = GetElem(L,i-1);LNode* s;s = (LNode*)malloc(sizeof(LNode));if (s == NULL) {return false;}else {s->data = e;s->next = p->next;p->next = s;}return true;
}
//删除结点
bool DeleteElem(LinkList& L, int i) {LNode* p = GetElem(L, i - 1);LNode* s = p->next;p->next = s->next;free(s);return true;
}
void ListShow(LinkList L) {LNode *i = L;printf("目前顺序表里的元素:");while (i->next != NULL) {i = i->next;printf("%d\t",i->data);}printf("\n");
}
int main() {int i,e;LinkList L=NULL;LNode* p;while (1) {printf("*****************************************\n");printf("请输入您要进行的操作:\n");printf("1.用头插法建立单链表 2.用尾插法建立单链表\n");printf("3.按序号查找结点值 4.按值查找表结点\n");printf("5.插入结点 6.删除结点\n");printf("*****************************************\n");scanf_s("%d",&i);switch (i) {case 1:List_HeadInsert(L); break;case 2: List_TailInsert(L); break;case 3: printf("请输入您想要查找第几个结点\n");scanf_s("%d",&i);p=GetElem(L,i); printf("该结点的数据为%d\n",p->data);break;case 4:printf("请输入您想要查找的结点的值\n");scanf_s("%d", &i);p = LocateElem(L, i);if (p) { printf("表内存在该结点\n"); }else {printf("表内不存在该结点");}break;case 5:printf("请输入您想要在第几个位置上插入结点的值以及具体的值\n");scanf_s("%d%d", &i,&e);InsetElem(L, i,e);break;case 6:printf("请输入您想要删除第几个位置上的结点\n");scanf_s("%d", &i);DeleteElem(L, i);break;default:printf("输入错误\n");break;}ListShow(L);}
}
效果展示: