• 数据结构--单链表操作


    1.单链表的创建(带头结点)

    1. #include
    2. #define ElemType int
    3. typedef struct {//定义一个结点
    4. ElemType data;
    5. struct STU* next;
    6. }STU,*LinkList;
    7. bool InitList(LinkList& L) {
    8. L = (STU*)malloc(sizeof(STU));//创建头结点
    9. if (L == NULL) {//以防内存不足创建失败
    10. return false;
    11. }
    12. L->next = NULL;
    13. return true;
    14. }
    15. int main() {
    16. LinkList L;
    17. InitList(L);
    18. }

     

    2.单链表的创建(不带头结点)

    1. #include //使用NULL需要的头文件
    2. #define ElemType int
    3. typedef struct {
    4. ElemType data;
    5. struct STU* next;
    6. }STU,*LinkList;
    7. bool InitList(LinkList& L) {
    8. L = NULL;//空表,没有结点
    9. return true;
    10. }
    11. int main() {
    12. LinkList L;//声明一个指向单链表的指针
    13. InitList(L);//初始化一个空的单链表
    14. }

     

    3.单链表(带头结点)--按位序插入

    1. #include
    2. #define ElemType int
    3. #include
    4. typedef struct {//定义一个结点
    5. ElemType data;
    6. struct STU *next;
    7. }STU, *LinkList;
    8. bool InitList(LinkList& L) {
    9. L = (STU*)malloc(sizeof(STU));//创建头结点
    10. if (L == NULL) {//以防内存不足创建失败
    11. return false;
    12. }
    13. L->next = NULL;
    14. return true;
    15. }
    16. bool ListInsert(LinkList& L, int i, ElemType e) {
    17. if (i < 1) {
    18. return false;
    19. }
    20. STU *p;//定义一个指针让其指向当前扫描到的结点
    21. int j = 0;//表示p当前指向第几个结点
    22. p = L;//L指向头结点,头结点是第零个结点,不存数据
    23. while (p != NULL && j < i - 1) {//找到第i-1个结点
    24. p = p -> next;
    25. j++;
    26. }
    27. if (p == NULL) {
    28. return false;
    29. }
    30. STU* s = (STU*)malloc(sizeof(STU));//定义一个新结点放插入的元素
    31. s->data = e;
    32. s->next = p->next;//不要搞反这两行的顺序
    33. p->next = s;
    34. return true;
    35. }
    36. int main() {
    37. LinkList L;
    38. InitList(L);
    39. ListInsert(L, 2, 3);//在第二个位置插入数据3
    40. }

     

     4.单链表(不带头结点)--按位序插入

    1. #include //使用NULL需要的头文件
    2. #include "ConsoleApplication1.h"
    3. #include
    4. #define ElemType int
    5. typedef struct {
    6. ElemType data;
    7. struct STU* next;
    8. }STU,*LinkList;
    9. bool InitList(LinkList& L) {
    10. L = NULL;//空表,没有结点
    11. return true;
    12. }
    13. bool ListInsert(LinkList &L, int i, ElemType e) {
    14. if (i < 1) {
    15. return false;
    16. }
    17. if (i == 1) {//特殊情况
    18. STU* s = (STU*)malloc(sizeof(STU));
    19. s->data = e;
    20. s->next = L;
    21. L = s;
    22. return true;
    23. }
    24. STU* p;//定义一个指针让其指向当前扫描到的结点
    25. int j = 1;//表示p当前指向第几个结点
    26. p = L;//L指向头结点,头结点是第零个结点,不存数据
    27. while (p != NULL && j < i - 1) {//找到第i-1个结点
    28. p = p -> next;
    29. j++;
    30. }
    31. if (p == NULL) {
    32. return false;
    33. }
    34. STU* s = (STU*)malloc(sizeof(STU));//定义一个新结点放插入的元素
    35. s->data = e;
    36. s->next = p->next;//不要搞反这两行的顺序
    37. p->next = s;
    38. return true;
    39. }
    40. int main() {
    41. LinkList L;//声明一个指向单链表的指针
    42. InitList(L);//初始化一个空的单链表
    43. ListInsert(L, 2, 3);
    44. }

     

    5.单链表--指定结点的后插操作(带头结点)

    1. #include
    2. #define ElemType int
    3. typedef struct {//定义一个结点
    4. ElemType data;
    5. struct STU* next;
    6. }STU,*LinkList;
    7. bool InitList(LinkList& L) {
    8. L = (STU*)malloc(sizeof(STU));//创建头结点
    9. if (L == NULL) {//以防内存不足创建失败
    10. return false;
    11. }
    12. L->next = NULL;
    13. return true;
    14. }
    15. bool InsertNextNode(STU* p, ElemType e) {
    16. if (p == NULL) {
    17. return false;
    18. }
    19. STU* s = (STU*)malloc(sizeof(STU));
    20. s->data = e;
    21. s->next = p->next;
    22. p->next = s;
    23. return true;
    24. }
    25. int main() {
    26. LinkList L;
    27. InitList(L);
    28. STU *p;
    29. InsertNextNode(p, 3);
    30. }

     

    6.单链表--指定结点的前插操作(带头结点)

    1. #include
    2. #define ElemType int
    3. typedef struct {//定义一个结点
    4. ElemType data;
    5. struct STU* next;
    6. }STU,*LinkList;
    7. bool InitList(LinkList& L) {
    8. L = (STU*)malloc(sizeof(STU));//创建头结点
    9. if (L == NULL) {//以防内存不足创建失败
    10. return false;
    11. }
    12. L->next = NULL;
    13. return true;
    14. }
    15. bool InsertPriorNode(STU* p, ElemType e) {//前插操作就是先后插,再调转两个数据的位置
    16. if (p == NULL) {
    17. return false;
    18. }
    19. STU* s = (STU*)malloc(sizeof(STU));
    20. s->next = p->next;
    21. p->next = s;
    22. s->data = p -> data;
    23. p->data = e;
    24. return true;
    25. }
    26. int main() {
    27. LinkList L;
    28. InitList(L);
    29. STU* p;
    30. InsertPriorNode(p, 3);
    31. }

     

     7.单链表--按位序删除(带头结点)

    1. #include
    2. #define ElemType int
    3. typedef struct {//定义一个结点
    4. ElemType data;
    5. struct STU* next;
    6. }STU,*LinkList;
    7. bool InitList(LinkList& L) {
    8. L = (STU*)malloc(sizeof(STU));//创建头结点
    9. if (L == NULL) {//以防内存不足创建失败
    10. return false;
    11. }
    12. L->next = NULL;
    13. return true;
    14. }
    15. bool ListDelete(LinkList& L, int i, ElemType e) {
    16. if (i < 1) {
    17. return false;
    18. }
    19. STU* p;
    20. int j = 0;
    21. p = L;
    22. while (p != NULL && j < i - 1) {
    23. p = p->next;
    24. j++;
    25. }
    26. if (p == NULL||p->next==NULL) {
    27. return false;
    28. }
    29. STU* q = p->next;
    30. e = q->data;
    31. p->next = q->next;
    32. free(q);
    33. return true;
    34. }
    35. int main() {
    36. LinkList L;
    37. InitList(L);
    38. ElemType e;
    39. ListDelete(L, 2, e);
    40. }

     

  • 相关阅读:
    基于Android studio智能快递柜存放取物系统java
    关于数据治理工具的选型,你了解多少?
    Java中的文件操作(基础知识+三个小程序练习)
    远程Debug运行在容器内的Java项目实践整理
    【华为OD机试真题 JS】喊7的次数重排
    触发迅雷下载
    openlayers 绘制动态迁徙线、曲线
    SpringMVC
    使用任务定时执行软件的定时关机功能,控制电脑可用时间段
    FreeRTOS实时操作系统 —基于STM32
  • 原文地址:https://blog.csdn.net/m0_72084166/article/details/133798824