#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int Status;
typedef struct LNode{
Status data;
struct LNode *next;
}LNode,*LinkList;
LinkList HeadIsert(LinkList &L,int n)//都带有头结点
{
LNode *s;
int x=1;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
while(x!=n+1)
{
s=(LNode *)malloc(sizeof(LNode));
scanf("%d",&s->data);
s->next=L->next;
L->next=s;
x++;
}
return L;
}
LinkList TailInsert(LinkList &L,int n)//有头结点的尾插法
{
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
int x=1;//为什么非要用这个r
while(x!=n+1)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&s->data);
r->next=s;
r=s;//r指向s;
x++;
}
r->next=NULL;
return L;
}
void PrintfList(LinkList &L)//有结点的输出方式
{
LNode *s;
s=L->next;
while(s!=NULL)
{
printf("%d ",s->data);
s=s->next;
}
printf("\n");
}
LinkList headinsert(LinkList &L,int n)//无结点的头插法
{
LNode *s;
L=(LinkList)malloc(sizeof(LNode));
scanf("%d",&L->data);//取地址符号不要忘记了
L->next=NULL;
int x=1;
while(x!=n)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&s->data);
s->next=L;//s的指针域指向L
L=s;//指针L指向s
x++;
}
return L;
}
LinkList tailinsert(LinkList &L,int n)//无结点的尾插法
{
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
scanf("%d",&r->data);
int x=1;
while(x!=n)
{
s=(LinkList)malloc(sizeof(LNode));
scanf("%d",&s->data);
r->next=s;
r=s;
x++;
}
r->next=NULL;
return L;
}
void printflist(LinkList &L)//无结点的输出方式
{
LNode *s;
s=L;
while(s!=NULL)
{
printf("%d ",s->data);
s=s->next;
}
printf("\n");
}
int main(void)
{
int n;
printf("请输入单链表的个数:");
scanf("%d",&n);
LinkList L,S,P,Q;
printf("有头结点的头插法:\n");
HeadIsert(L,n);
PrintfList(L);
printf("没有结点的头插法:\n");
headinsert(S,n);
printflist(S);
printf("有结点的尾插法:\n");
TailInsert(P,n);
PrintfList(P);
printf("无结点的尾插法:\n");
tailinsert(Q,n);
printflist(Q);
return 0;
}
用单链表表示线性表(头插法,尾插法)
于 2024-04-29 10:40:51 首次发布