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

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

希望把这几个程序弄完了,能搞出个简单的系统来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;
}


原文地址:https://www.cnblogs.com/freezhan/p/2776476.html