数据结构(C语言版)线性链表C++代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2
typedef int Status; // Status是函数的类型,
//其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其
//值是TRUE或FALSE
typedef int ElemType;
#define LIST_INIT_SIZE 100 // 线性表存储空间的初
//始分配量
#define LISTINCREMENT 10 // 线性表存储空间的分配增量
typedef struct LNode {
int length;
ElemType data; // 存储空间基址
struct LNode *next;
// 当前长度
// 当前分配的存储容量(以
//sizeof(ElemType)为单位)
} LNode, *LinkList;
//获取元素
Status GetElem_L(LinkList L,int i,ElemType &e)
{
int j;
LinkList p;
p=L->next;j=1;
while(p&&j{
p=p->next;++j;
}
if(!p||j>i) return ERROR;
p->data=e;
return OK;
}
/*void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList pa,pb,pc;
pa=La->next;pb=Lb->next;
Lc=pc=La;
while(pa&&pb)
{
if(pa->data<=pb->data)
{
pc->next=pa;pc=pa;pa=pa->next;
}
else
{
pc->next=pb;pc=pb;pb=pb->next;
}
}
pc->next=pa ? pa:pb;
free(Lb);
}*/
//插入操作
Status ListInsert_L(LinkList &L, int i, ElemType e)
{
LinkList p,s; int j;
p=L;j=0;
while(p&&j
p=p->next;++j;
}
if(!p||j>i-1) return ERROR;
s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=p->next;p->next=s;
return OK;
}
//删除
Status ListDelete_L(LinkList &L, int i, ElemType &e)
{
LinkList p,q; int j;
p=L;j=0;
while(p->next&&j
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;
}
//输出
void print_L(LinkList &L)
{LinkList p;p=L->next;
while(p!=NULL)
{printf("%d ",p->data); p=p->next;}
printf("\n");
}
//创建链表
void CreatList_L(LinkList &L,int n)
{
int i; LinkList p;
L=(LinkList)malloc(sizeof (LNode));
L->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof (LNode));
scanf("%d",&p->data);
p->next=L->next;L->next=p;
}
}
//主函数
void main()
{
LinkList L;
int i,n,x,d,e;
n=1;
printf("输入表长n:");
scanf("%d",&n);
CreatList_L(L,n);
printf("\n输出表L:");
print_L(L);
printf("输入插入元素位置i:");
scanf("%d",&i);
printf("输入插入元素值x:");
scanf("%d",&x);
ListInsert_L( L, i, x);
printf("\n输出表L:");
print_L(L);
printf("\n输入删除位置i:");
scanf("%d",&i);
d=Li
stDelete_L( L,i,e);
if(d) {printf("\n输出被删元素值:");
printf("%d",e);
}
else printf("删除位置非法");
printf("\n输出表L:");
print_L(L);
printf("\n输入需赋值的元素位置i:");
scanf("%d",&i);
printf("输入所赋的值e: ");
scanf("%d",&e);
GetElem_L(L,i, e);
printf("\n输出赋值后结果:");
print_L(L);
}