• 双向链表的创建,查找,删除


     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 /*
     5 双向链表,创建,查找,删除
     6 */
     7 //定义结构
     8 typedef struct stu
     9 {
    10     char name[30];
    11     char sex;
    12     int num;
    13     float math;
    14     float chinese;
    15     float english;
    16 }STU;
    17 typedef struct node
    18 {
    19     STU data;
    20     struct node *pre;
    21     struct node *next;
    22 }NODE;
    23 //创建空链表
    24 NODE *creatList()
    25 {
    26     NODE *head = (NODE *)malloc(sizeof(NODE));
    27     head->pre = head;//自己指向自己,形成回环,自己指向自己很重要。后面插入节点都靠他。
    28     head->next = head;
    29     return head;
    30 }
    31 //插入节点
    32 void insertNode(NODE *head)
    33 {
    34     NODE * cur = (NODE *)malloc(sizeof(NODE));
    35     printf("------------input student score---------------
    ");
    36     printf("pls input name :"); scanf("%s",cur->data.name);getchar();
    37     printf("pls input sex :");    scanf("%c",&cur->data.sex);
    38     printf("pls input num :");    scanf("%d",&cur->data.num);
    39     printf("pls input math :");    scanf("%f",&cur->data.math);
    40     printf("pls input chinese :");    scanf("%f",&cur->data.chinese);
    41     printf("pls input english :");    scanf("%f",&cur->data.english);
    42     cur->next = head->next;
    43     cur->pre = head;
    44     head->next = cur;
    45     cur->next->pre = cur;
    46 }
    47 //遍历链表
    48 void traverList(NODE *head)
    49 {
    50     NODE *phead = head->next;
    51     while(phead != head)
    52     {
    53         printf("name:%s sex:%c num:%d math:%.2f chinese:%.2f english:%.2f
    "
    54                 ,phead->data.name,phead->data.sex,phead->data.num,phead->data.math,phead->data.chinese,phead->data.english);
    55         phead = phead->next;
    56     }
    57 }
    58 NODE * searchList(NODE *head,char *p)
    59 {
    60     NODE *phead = head->next;
    61     while(phead != head)
    62     {
    63         if(strcmp(p,phead->data.name) == 0)
    64             return phead;
    65         phead = phead->next;
    66     }
    67 }
    68 void deleteNode(NODE *p)
    69 {
    70     p->pre->next = p->next;
    71     p->next->pre = p->pre;
    72 }
    73 int main(void)
    74 {
    75     //创建空链表
    76     NODE * head = creatList();
    77     //插入节点
    78     int i;
    79     for(i = 0;i<4;i++)
    80         insertNode(head);
    81     traverList(head);
    82     //查找结点
    83     NODE *p =searchList(head,"haha");
    84     //删除结点
    85     printf("------------delete---------------
    ");
    86     deleteNode(p);
    87     traverList(head);
    88 
    89 
    90     return 0;
    91 }
  • 相关阅读:
    POJ 1017
    poj 2709
    poj 1328
    POJ 2386
    POJ 1065
    POJ 3728
    hdu--1004--Let the Balloon Rise
    hdu--2570--迷瘴(贪心)
    hdu--1257--最少拦截系统(贪心)
    hdu--1230--火星A+B
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/10062241.html
Copyright © 2020-2023  润新知