#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define INITSIZE 5
typedef struct node
{
int data;
struct node *next;
}Node,*LinkList;
void CreateList(LinkList L,int n);//用头插法创建链表
void PrintList(LinkList L);//打印链表
bool GetElem(LinkList L,int n,int *val);//按序号查找
void ListInsert(LinkList L,int x,int i);//插入元素
void ListDelete(LinkList L,int n);//删除元素
void MergeList(LinkList LA,LinkList LB,LinkList L);//将两个有序链表合并为一个有序链表
int main()
{
LinkList L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
int n,val;
printf("请输入链表的元素:\n");
CreateList(L,INITSIZE);
PrintList(L);
printf("请输入要查找的元素序号:");
scanf("%d",&n);
bool state=GetElem(L,n,&val);
if(state)
{
printf("第%d个元素为%d\n",n,val);
}
else
{
printf("输入出错");
}
printf("请输入要插入的元素位置:");
scanf("%d",&n);
printf("请输入要插入的元素数据:");
scanf("%d",&val);
ListInsert(L,val,n);
PrintList(L);
printf("请输入要删除的元素位置:");
scanf("%d",&n);
ListDelete(L,n);
PrintList(L);
LinkList LA=(LinkList)malloc(sizeof(Node)),LB=(LinkList)malloc(sizeof(Node)),LC=(LinkList)malloc(sizeof(Node));
LA->next=NULL,LB->next=NULL,LC->next=NULL;
CreateList(LA,INITSIZE);
CreateList(LB,INITSIZE);
MergeList(LA,LB,LC);
PrintList(LC);
return 0;
}
void CreateList(LinkList L,int n)
{
int i;
LinkList p;
for(i=0;i<n;i++)
{
p=(LinkList)malloc(sizeof(Node));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}
bool GetElem(LinkList L,int n,int *val)
{
LinkList p=L->next;
int i=1;
while(p&&i<n)
{
p=p->next;i++;
}
if(p==NULL)
return false;
else
*val=p->data;
return true;
}
void PrintList(LinkList L)
{
LinkList p=L->next;
while(p!=0)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void ListInsert(LinkList L,int x,int i)
{
LinkList p=L->next,q;
int j=1;
q=(LinkList)malloc(sizeof(Node));
q->data=x;
while(j<i-1)
{
p=p->next;j++;
}
if(p!=0)
{
q->next=p->next;
p->next=q;
}
}
void ListDelete(LinkList L,int n)
{
LinkList p=L->next;
int i=1;
while(i<n-1)
{
p=p->next;i++;
}
LinkList q=p->next;
if(p!=0)
{
p->next=q->next;
free(q);
}
}
void MergeList(LinkList LA,LinkList LB,LinkList L)
{
LinkList pa=LA->next,pb=LB->next,p=L;
while(pa&&pb)
{
if(pa->data <= pb->data)
{
p->next=pa;
p=pa;
pa=pa->next;
}
else
{
p->next=pb;
p=pb;
pb=pb->next;
}
}
if(pa==0)
{
p->next=pb;
}
else
{
p->next=pa;
}
free(LA),free(LB);
}
单链表的基本操作用c语言表示
最新推荐文章于 2022-11-20 16:19:55 发布