赞
踩
大学生-程序元,开始记录生活
南枫在这里和大家一同进步,一同交流学习
注:代码实现用Visual Studio 2019
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; //单链表结点的定义 typedef struct LNode {//单链表结点类型 ElemType data;//数据域 struct LNode* next;//指针域 }LNode,*LinkList; //指针类型的LinkList,指向这个结构体 //*LinkList 等价于 struct LNode * //头插法新建链表 LinkList CreatList1(LinkList& L) { LNode* s; int x; L = (LinkList)malloc(sizeof(LNode));//带头结点的链表 L->next = NULL;//L->data里面没放东西 scanf("%d", &x);//从标准输入读入数据 //3 4 5 6 7 9999 while (x != 9999) { s = (LNode*)malloc(sizeof(LNode));//申请一个新空间,强制类型转换 s->data = x;//把读取到的值,给新空间中的数据部分 s->next = L->next; L->next = s; scanf("%d", &x);//读取标准输入 } return L; } LinkList CreatList2(LinkList &L) { int x; L = (LinkList)malloc(sizeof(LNode)); // 我们认为r是指向表尾节点的 LNode* s, * r = L; //3 4 5 6 7 9999 scanf("%d", &x); while (x != 9999) { s = (LNode*)malloc(sizeof(LNode)); s->data = x; r->next = s; r = s;//r指向新的表尾节点 scanf("%d", &x); } r->next = NULL;//尾节点的next指针赋值为NULL return L; } //打印链表中每个节点的数值 /*void PrintList(LinkList L) { L = L->next; while (L != NULL) { printf("%3d", L->data); L = L->next; } printf("\n"); }*/ void PrintList(LinkList L) { L = L->next; while (L != NULL) { printf("%3d", L->data);//打印当前结点数据 L = L->next;//指向下一个结点 } printf("\n"); } LinkList GetElem(LinkList L,int i) { int j = 1; LNode* p = L->next;//开始就让p指向第一个节点(不是头节点) if (i == 0) return L; if (i < 1) return NULL; while (p && j < i) { p = p->next;//让p指向下一个节点 j++; } return p; } LinkList LocateElem(LinkList L, ElemType e) { LinkList p = L->next; while (p != NULL && p->data != e) { p = p->next; } return p; } //往第i个位置插入元素 bool ListFrontInsert(LinkList L, int i, ElemType e) { //拿到要插入位置的前一个位置的地址值 LinkList p = GetElem(L, i-1); if (NULL == p) { return false; } LinkList s = (LNode*)malloc(sizeof(LNode));//为新插入的节点申请空间 s->data = e; s->next = p->next; p->next = s; return true; } //删除第i个位置的元素 bool ListDelete(LinkList L, int i) { LinkList p = GetElem(L, i - 1);//查找删除位置的前驱节点 if (NULL == p) { return false;//要删除的位置不存在 } LinkList q = p->next; if (q == NULL)//删除的元素不存在 return false; p->next = q->next;//断链 free(q);//释放对应节点的空间 q = NULL;//为了避免野指针 return true; } int main() { LinkList L;//链表头,是结构体指针类型,等于struct LNode* L; LinkList search;//用来存储拿到的某一个结点 //CreatList1(L);//输入数据可以为3 4 5 6 7 9999 头插法新建链表 //PrintList(L); CreatList2(L);//尾插法新建链表 //PrintList(L); search = GetElem(L, 2);//按序号查询 if (search != NULL) { //printf("按序号查找成功\n"); printf("%d\n", search->data); } //search = LocateElem(L, 6);//按值查询 //if (search != NULL) { // printf("按值查找成功\n"); // printf("%d\n", search->data); //} ListFrontInsert(L, 2, 99);//新节点插入第i个位置 PrintList(L);//链表打印 ListDelete(L, 4); PrintList(L); return 0; }
如果您感觉这篇文章有帮助,希望大家可以点个赞,支持一下。
您的支持,就是我的动力。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。