仿写的一个简单而傻逼的程序,线性表入门。。。
希望把这几个程序弄完了,能搞出个简单的系统来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;
}