• 线性表的链式表(单链表类型)


    仿写的一个简单而傻逼的程序,线性表入门。。。

    希望把这几个程序弄完了,能搞出个简单的系统来O(∩_∩)O

    /*******************************************
    实验内容二:
     1.用C语言定义线性表的链式存储结构(单链表)类型;
     2.编制链式存储结构下的线性表的输入程序;
     3.编制链式存储结构下线性表的插入算法程序或删除算法程序;
     4.编制链式存储结构下的线性表的输出程序;
     5.在链式存储结构下编制主程序:输入一个具体的线性表,
       然后随意地在表中的任意位置执行插入一个元素
       或删除一个元素的操作,最后输出线性表的操作结果。
    ********************************************/
    //线性表的链式结构(单链表类型)
    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<malloc.h>
    using namespace std;
    #define OK 1//成功
    #define ERROR 0
    #define OVERFLOW 0//溢出标志或者分配失败
    typedef int ElemType;
    typedef int Status;
    typedef struct LNode
    {
        ElemType data;//节点数据
        LNode *next;//节点的下一个地址
    }LNode,*LinkList;
    //初始化一个空表
    Status InitList(LinkList &L)
    {
        L=new LNode;//建立新表
        if(!L)
          exit(OVERFLOW);//存储分配失败
        L->data=-1;
        L->next=NULL;
        return OK;
    }
    //输出数据**************
    void PrintList(LinkList L)
    {
        LinkList p;
        printf("你输入的数据为:");
        p=L->next;//从头结点开始扫描
        while(p)
        {
            printf("%d ",p->data);
            p=p->next;
        }
        printf("\n\n");
    }
    //逆序输入n个数据元素,存入表中
    void CreateList_L(LinkList &L,int n)//LinkList &L
    {
        int i;
        LinkList p;
        printf("逆序输入%d个数据元素:\n",n);
        for(i=n;i>0;i--)
        {
            p=new LNode;
            scanf("%d",&p->data);
            p->next=L->next;
            L->next=p;
        }
    }
    //删除
    Status ListDelete_L(LinkList L,int i,ElemType &e)
    {
        LinkList p,q;
        int j;
        p=L ; j=0;
        while(p->next && j<i-1)
        {
            p=p->next;j++;
        }
        if(!(p->next) || j>i-1)
          return ERROR;
        q=p->next; p->next=q->next;
        e=q->data; free(q);
        return OK;
    }
    //插入
    Status ListInsert_L(LinkList L,int i)
    {
        LinkList p,q;
        int j=0;
        p=L;
        while(p && j<i-1)
        {
            p=p->next;j++;
        }
        if(!(p->next) || j>i-1)
           return ERROR;
        q=new LNode;
        printf("请输入插入的元素:");
        scanf("%d",&q->data);
        q->next=p->next;
        p->next=q;
        return OK;
    }
    
    int main()
    {
       LinkList L;
       ElemType e;
       int countinue;
       int n;
       int i;
       char YesOrNo;
       InitList(L);//初始化空表
       printf("欢迎使用free斩的第一个线性链式表:\n");
       do
       {
           printf("**********************请选择操作*****************************\n");
           printf("*******               1.输入顺序表                    *******\n");
           printf("*******               2.删除顺序表中任一元素          *******\n");
           printf("*******               3.在顺序表中插入任一元素        *******\n");
           printf("*******               4.输出顺序表                    *******\n");
           printf("*******               5.退出                          *******\n");
           int _select=0;
           countinue=1;
           scanf("%d",&_select);
           switch(_select)
           {
               case 1:
                      printf("请输入链表中元素个数:");
                      scanf("%d",&n);
                      CreateList_L(L,n);
                      printf("逆序输出你输入的链表:");
                      PrintList(L);
                      printf("是否退出程序(Y/N)?\n");
                      scanf("%s",&YesOrNo);
                      if(YesOrNo=='Y' || YesOrNo=='y')
                         countinue=0;
                      break;
               case 2:
                      printf("请输入你要删除的元素位置:");
                      scanf("%d",&i);
                      ListDelete_L(L,i,e);
                      PrintList(L);
                      printf("是否退出程序(Y/N)?\n");
                      scanf("%s",&YesOrNo);
                      if(YesOrNo=='Y' || YesOrNo=='y')
                         countinue=0;
                      break;
               case 3:
                      printf("请输入你要插入元素的位置:");
                      scanf("%d",&i);
                      ListInsert_L(L,i);
                      PrintList(L);
                      printf("是否退出程序(Y/N)?\n");
                      scanf("%s",&YesOrNo);
                      if(YesOrNo=='Y' || YesOrNo=='y')
                         countinue=0;
                      break;
               case 4:PrintList(L);
                      printf("是否退出程序(Y/N)?\n");
                      scanf("%s",&YesOrNo);
                      if(YesOrNo=='Y' || YesOrNo=='y')
                         countinue=0;
                      break;
               case 5:printf("感谢您的使用!!!\n");
                      printf("writer LYH\n");
                      countinue=0;
            }
       }while(countinue);
       return 0;
    }
    


  • 相关阅读:
    [PKUSC2018]星际穿越——可持久化线段树+DP
    BZOJ2863[SHOI2012]魔法树——树链剖分+线段树
    BZOJ1758[Wc2010]重建计划——分数规划+长链剖分+线段树+二分答案+树形DP
    BZOJ4543[POI2014]Hotel加强版——长链剖分+树形DP
    树链剖分讲解及总结(重链剖分+长链剖分)
    Dubbo(3)--dubbo的源码分析
    Dubbo(1)--初识Dubbo
    zookeeper(5)--基于watcher原理实现带注册中心的RPC框架
    模板方法模式
    单例模式
  • 原文地址:https://www.cnblogs.com/freezhan/p/2776476.html
Copyright © 2020-2023  润新知