c语⾔线性表怎么输⼊数据,初学者c语⾔数据结构线性表的基
本操作及应⽤
[C] 纯⽂本查看 复制代码/*
Name:Linklist operation.cpp
Author:X
Date:2020/3/13
Description: 线性表的基本操作及应⽤
*/
#include
#include //分配数据
#define ERROR 0;
#define OK 1;
typedef int ElemType;
typedef int status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//建⽴线性表LA ,头插法
status CreatList_LA(LinkList &LA,int n)
{
LNode *p;int i;
LA=(LinkList)malloc(sizeof(LNode));
LA->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=LA->next;
LA->next=p;
}
return OK;
}
//建⽴线性表LB
status CreakList_LB(LinkList &LB,int n)
{
LNode *p;status i;
LB=(LinkList)malloc(sizeof(LNode));
LB->next=NULL;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=LB->next;
LB->next=p;
}
return OK;
}
//在第i个结点前插⼊e
status ListInsert_LA(LinkList &LA,status i,ElemType e) {
LNode *p,*s; //等同于 LinkList p,s;
status j;
p=LA;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;
}
/
/删除第i个结点,值代⼊e
status ListDelete_LA(LinkList &LA,int i,ElemType &e)
{
LNode *p,*q;
status j;
p=LA;j=0;
while(p||j
{p=p->next;++j;}
if(p->next==NULL||j>i-1)
return ERROR;
q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
//查到第i个元素,⽤e返回
status GetElem_LA(LinkList LA,int i,ElemType e)
{
LNode *p;
p=LA;
status j;
j=0;
while(p&&j
{p=p->next;++j;}
if(!p||j>i)
return ERROR;
e=p->data;
return OK;
}
//合并线性表LA和LB
status MergeList_L(LinkList &LA,LinkList &LB,LinkList &LC) {
LNode *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->next;
}
else
{
pc->next=pb;
pc=pb;
pb=pb->next;
}
pc->next=pa?pa:pb;
}
free(LB);
}
//输出链表
status printfList_L(LinkList &L) {
LNode *p;
int i;
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
}
int main()
{
ElemType e ;
LinkList LA,LB,LC;
status i,n;
printf("输⼊向所创建LA链表中插⼊⼏个结点,n为:"); scanf("%d",&n);
printf("输⼊链表的结点数据:");
CreatList_LA(LA,n) ;
printf("输⼊向所创建LB链表中插⼊⼏个结点,n为:"); scanf("%d",&n);
printf("输⼊链表的结点数据:");
CreakList_LB(LB,n);
printf("输出链表LA为:");
printfList_L(LA);
printf("\n输出链表LB为:");
printfList_L(LB);
printf("\n输⼊在链表第⼏个位置插⼊结点,i,e为:"); scanf("%d%d",&i,&e);
ListInsert_LA(LA,i,e);
printf("\n插⼊后使出的链表为:");c语言listinsert函数
printfList_L(LA);
printf("\n输⼊在链表第⼏个位置删除结点,i为:"); scanf("%d",&i);
ListDelete_LA(LA,i,e);
printf("\n删除后的链表LA为:");
printfList_L(LA);
printf("删除的第%d个结点所储存的元素为:%f",i,e); printf("\n输⼊想查第⼏个元素结点,i为:");
scanf("%d",&i);
GetElem_LA(LA,i,e);
printf("\n查到的第i个元素为:");
printf("%d",e);
printf("\n合并之后的链表为:");
MergeList_L(LA,LB,LC);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论