输入格式:第1行,输入若干个用头插法构成单链表 L1 的元素,使用
-1
结束,例如:1 3 5 7 9 -1
。第2行,输入若干个用尾插法构成单链表 L2 的元素,使用
-1
结束,例如:2 4 6 8 10 -1
。第3行,分别输入在第一个单链表 L1 中插入的元素 66 和位置 5,在第二个单链表 L2 中查找的元素 8 和删除元素的位置 1,用空格隔开。例如:
输出格式:66 5 8 1
参照主函数及输出样例。
测试数据在
输入样例:1~99
之间,输出格式使用%3d
。输出样例:1 3 5 7 9 -1 2 4 6 8 10 -1 66 5 8 1
头插法创建单链表L1... 9 7 5 3 1 单链表L1的长度为:5 尾插法创建单链表L2... 2 4 6 8 10 单链表L2的长度为:5 在单链表L1中第5个位置插入元素66... 9 7 5 3 66 1 删除单链表L2中第1个位置的元素... 4 6 8 10 删除的元素是:2 在单链表L1中查找元素... 单链表L1中第5个元素的值为:66 在单链表L2中查找元素的位置... 单链表L2中元素8的位置为:3
#include
#include
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
void InitList_L(LinkList &PHead);
void InsertList_L(LinkList &L, int i, ElemType e);
void DeleteList_L(LinkList &L, int i, ElemType &e);
void CreatListFromHead_L(LinkList &PHead);
void CreatListFromTail_L(LinkList &PHead);
void PrintList_L(LinkList &L); //已知
bool IsEmptyList_L(LinkList &L); //已知
void GetElemList_L(LinkList &L, int i, ElemType &e);
int LocateElemList_L(LinkList &L, ElemType e); //已知
int LengthList_L(LinkList &L); //已知
void FreeList_L(LinkList &L); //已知
int main()
{
LinkList L1, L2;
ElemType e, data;
int index, n;
InitList_L(L1);
InitList_L(L2);
CreatListFromHead_L(L1);
CreatListFromTail_L(L2);
scanf("%d %d %d %d", &e, &index, &data, &n);
printf("头插法创建单链表L1...\n");
PrintList_L(L1);
printf("单链表L1的长度为:%d\n", LengthList_L(L1));
printf("尾插法创建单链表L2...\n");
PrintList_L(L2);
printf("单链表L2的长度为:%d\n", LengthList_L(L2));
printf("在单链表L1中第%d个位置插入元素%d...\n", index, e);
InsertList_L(L1, index, e);
PrintList_L(L1);
printf("删除单链表L2中第%d个位置的元素...\n", n);
DeleteList_L(L2, n, e);
PrintList_L(L2);
printf("删除的元素是:%d\n", e);
printf("在单链表L1中查找元素...\n");
GetElemList_L(L1, index, e);
printf("单链表L1中第%d个元素的值为:%d\n", index, e);
printf("在单链表L2中查找元素的位置...\n");
printf("单链表L2中元素%d的位置为:%d", data, LocateElemList_L(L2, data));
return 0;
}
void PrintList_L(LinkList &L)
{
LinkList p = L->next;
//printf("单链表:");
while(p)
{
printf("%3d", p->data);
p = p->next;
}
printf("\n");
return;
}
bool IsEmptyList_L(LinkList &L)
{
return L->next == NULL;
}
int LocateElemList_L(LinkList &L, ElemType e)
{
LinkList p = L->next;
int j = 1;
while(p && p->data != e)
{
p = p->next;
j++;
}
if(p) return j;
else return -1;
}
int LengthList_L(LinkList &L)
{
LinkList p = L;
int len = 0;
while(p->next != NULL)
{
len++;
p = p->next;
}
return len;
}
void FreeList_L(LinkList &L)
{
LinkList p = L, q;
while(p->next != NULL)
{
q = p;
p = p->next;
free(q);
}
free(p);
return;
}
void InitList_L(LinkList &PHead)
{
PHead = (LinkList)malloc(sizeof(LNode));
if(!PHead) return;
PHead->next = NULL;
}
void InsertList_L(LinkList &L, int i, ElemType e)
{
LinkList p;
p = L;
int j=1;
while( p && jnext;
j++;
}
if(!p||j>i)
{
printf("插入的位置不合法!\n");
return;
}
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
}
void DeleteList_L(LinkList &L, int i, ElemType &e)
{
LinkList p,q;
p = L;
int j=1;
while( p->next && jnext;
j++;
}
if(!(p->next)||j>i)
{
printf("删除元素的位置不合法!\n");
e=-1;
return;
}
e = p->next->data;
q = p->next;
p->next = q->next;
free(q);
}
void CreatListFromHead_L(LinkList &PHead)
{
ElemType e;
scanf("%d",&e);
while(e!=-1)
{
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = NULL;
s->next = PHead->next;
PHead->next = s;
scanf("%d",&e);
}
}
void CreatListFromTail_L(LinkList &PHead)
{
LinkList p;
ElemType e;
p = PHead;
scanf("%d",&e);
while(e!=-1)
{
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = NULL;
p->next = s;
p = s;
scanf("%d",&e);
}
}
void GetElemList_L(LinkList &L, int i, ElemType &e)
{
LinkList p;
p = L;
int j=1;
while(p&&jnext;
j++;
}
if(!p||j>i)
{
printf("第%d个元素不存在!\n",i);
e=-1;
return;
}
e = p->next->data;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)