zoukankan      html  css  js  c++  java
  • 单链表基本操作(转)

     
      6 #include <stdio.h>
      7 #include <stdlib.h>
      8 typedef int ElemType;
      9 //////////////////////////////////////////// 
     10 //定义结点类型 
     11 typedef struct Node
     12 {
     13     ElemType data;                //单链表中的数据域 
     14     struct Node *next;            //单链表的指针域 
     15 }Node,*LinkedList;
     16 //////////////////////////////////////////// 
     17 //单链表的初始化
     18 LinkedList LinkedListInit()
     19 {
     20     Node *L;
     21     L = (Node *)malloc(sizeof(Node));    //申请结点空间 
     22     if(L == NULL)                        //判断是否有足够的内存空间 
     23         printf("申请内存空间失败/n");
     24     L->next = NULL;                     //将next设置为NULL,初始长度为0的单链表 
     25 }
     26 //////////////////////////////////////////// 
     27 //单链表的建立1,头插法建立单链表
     28 LinkedList LinkedListCreatH()
     29 {
     30     Node *L;
     31     L = (Node *)malloc(sizeof(Node));    //申请头结点空间
     32     L->next = NULL;                        //初始化一个空链表
     33     
     34     ElemType x;                            //x为链表数据域中的数据
     35     while(scanf("%d",&x) != EOF)
     36     {
     37         Node *p;
     38         p = (Node *)malloc(sizeof(Node));    //申请新的结点 
     39         p->data = x;                        //结点数据域赋值 
     40         p->next = L->next;                    //将结点插入到表头L-->|2|-->|1|-->NULL 
     41         L->next = p; 
     42     }
     43     return L; 
     44 } 
     45 //////////////////////////////////////////// 
     46 //单链表的建立2,尾插法建立单链表
     47 LinkedList LinkedListCreatT()
     48 {
     49     Node *L;
     50     L = (Node *)malloc(sizeof(Node));    //申请头结点空间
     51     L->next = NULL;                    //初始化一个空链表
     52     Node *r;
     53     r = L;                            //r始终指向终端结点,开始时指向头结点 
     54     ElemType x;                            //x为链表数据域中的数据
     55     while(scanf("%d",&x) != EOF)
     56     {
     57         Node *p;
     58         p = (Node *)malloc(sizeof(Node));    //申请新的结点 
     59         p->data = x;                        //结点数据域赋值 
     60          r->next = p;                    //将结点插入到表头L-->|1|-->|2|-->NULL 
     61         r = p; 
     62     }
     63     r->next = NULL; 
     64     
     65     return L;    
     66 }
     67 //////////////////////////////////////////// 
     68 //单链表的插入,在链表的第i个位置插入x的元素
     69 LinkedList LinkedListInsert(LinkedList L,int i,ElemType x)
     70 {
     71     Node *pre;                        //pre为前驱结点 
     72     pre = L;
     73     int tempi = 0;
     74     for (tempi = 1; tempi < i; tempi++)
     75          pre = pre->next;                    //查找第i个位置的前驱结点 
     76     Node *p;                                //插入的结点为p
     77     p = (Node *)malloc(sizeof(Node));
     78     p->data = x; 
     79     p->next = pre->next;
     80     pre->next = p;
     81     
     82     return L;                             
     83 } 
     84 //////////////////////////////////////////// 
     85 //单链表的删除,在链表中删除值为x的元素
     86 LinkedList LinkedListDelete(LinkedList L,ElemType x)
     87 {
     88     Node *p,*pre;                    //pre为前驱结点,p为查找的结点。 
     89     p = L->next;
     90     while(p->data != x)                //查找值为x的元素 
     91     {    
     92         pre = p; 
     93         p = p->next;
     94     }
     95     pre->next = p->next;            //删除操作,将其前驱next指向其后继。 
     96     free(p);
     97     return L;
     98 } 
     99 /////////////////////////////////////////////
    100 int main()
    101 {
    102     LinkedList list,start;
    103 /*    printf("请输入单链表的数据:"); 
    104     list = LinkedListCreatH();
    105     for(start = list->next; start != NULL; start = start->next)
    106         printf("%d ",start->data);
    107     printf("/n");
    108 */    printf("请输入单链表的数据:"); 
    109     list = LinkedListCreatT();
    110     for(start = list->next; start != NULL; start = start->next)
    111         printf("%d ",start->data);
    112     printf("/n");
    113     int i;
    114     ElemType x;
    115     printf("请输入插入数据的位置:");
    116     scanf("%d",&i);
    117     printf("请输入插入数据的值:");
    118     scanf("%d",&x);
    119     LinkedListInsert(list,i,x);
    120     for(start = list->next; start != NULL; start = start->next)
    121         printf("%d ",start->data);
    122     printf("/n");
    123     printf("请输入要删除的元素的值:");
    124     scanf("%d",&x);
    125     LinkedListDelete(list,x); 
    126     for(start = list->next; start != NULL; start = start->next)
    127         printf("%d ",start->data);
    128     printf("/n");
    129     
    130     return 0;
    131 } 
  • 相关阅读:
    java8 新特性
    class类加载机制
    redis和memcache的区别
    Nginx,Apache,Tomcat区别
    java synchronized锁的理解
    java BIO,NIO在单服务器,多客户端通信上的应用
    理解spring任务调度timer,Quartz,spring task
    理解同步与异步,及java中实现同步机制的方法
    java范型的理解
    正向代理,反向代理的理解
  • 原文地址:https://www.cnblogs.com/mynona/p/3690503.html
Copyright © 2011-2022 走看看