C语言链表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/* Note:Your choice is C IDE */
#include"stdio.h"
#include"stdlib.h"
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node, *LinkedList;
void InitLinkedList()
{
Node* L;
L=(Node *)malloc(sizeof(Node));
if (L==NULL)
printf("申请空间失败");
L->next=NULL;
}
LinkedList CreateLinkedListTail(int n)
{
int x;
Node*r;
Node*L;
L=(Node *)malloc(sizeof(Node));
L->next =NULL;
r=L;
printf("输入元素:\n");
while (n--)
{
Node *p;
scanf("%d", &x);
p=(Node *)malloc(sizeof(Node));
p->data=x;
r->next=p;
r=p;
}
r->next=NULL;
return L;
}
void InsertLinkedList(LinkedList L, int i, ElemType x)
{int j;
Node *s;
LinkedList p;
p=L;
j=1;
while (j<i)
{
p=p->next;
j++;
}
s=(Node *)malloc(sizeof(Node));
s->data=x;
s->next=p->next;
p->next=s;
}
void output(LinkedList L)
{
Node *p;
for (p=L->next;p!=NULL;p=p->next) {
printf("%d",p->data);
}
}
void deleteLinkedList(LinkedList L, int i) {
int j;
LinkedList p,q;
p=L;
j=1;
while (j<i)
{
p=p->next;
j++;
}
q=p->next;
p->next=p->next->next;
free(q);
}
int GetElem(LinkedList L, int i)
{
ElemType e;
int j;
LinkedList p;
p=L->next;
j=1;
while (p&&j<i)
{
p=p->next;
j++;
}
if (!p||j > i)
{
printf("第%d个节点不存在\n", i);
return 0;
}
else
e=p->data;
return e;
}
int getlength(LinkedList L)
{
LinkedList p;
int length=0;
p=L->next;
while (p)
{
printf("单链表的数据为%d\n", p->data);
length++;
p=p->next;
}
return length;
void PutElem(LinkedList L,int i,ElemType x){
int j=1;
LinkedList p;
p=L->next;
while(p&&j<i){
p=p->next;
j++;}
p->data=x;
}
void MergerList(LinkedList La,LinkedList Lb,LinkedList Lc){ LinkedList pa,pb,pc;
pa=La->next;
pb=Lb->next;
pc=Lc=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);
}
int main()
{
int n;
int i;
int x;
LinkedList La,Lb,Lc;
int flag=1;
{ printf("\n该程序用于实现链表的基本操作");
printf("\n1-----------建立链表" );
printf("\n2-----------插入操作" );
printf("\n3-----------删除操作" );
printf("\n4-----------替换操作" );
printf("\n5-----------查找操作" );
printf("\n6-----------链表合并" );
printf("\n请选择要进行的操作:");
scanf("%d",&i);
switch(i){
case 1:printf("输入单链表La的长度:");
scanf("%d", &n);
La = CreateLinkedListTail(n);
printf("该La链表中的元素为:");
output(La);
case 2:printf("\n输入要插入的位置");
scanf("%d",&i);
printf("输入要插入的元素");
scanf("%d",&x);
InsertLinkedList(La, i, x);
printf("该La链表中的元素为:");
output(La);
case 3:printf("\n输入要删除哪一位置上的元素:");
scanf("%d", &i);
deleteLinkedList(La, i);
printf("该La链表中的元素为:");
output(La);
case 4:printf("请输入要替换的位置:");
scanf("%d", &i);
printf("\n请输入要替换的元素值:");
scanf("%d",&x);
PutElem(La, i, x);
output(La);
case 5:printf("\n输入要查找哪一位置的元素:");
scanf("%d", &i);
printf("查找的元素为:%d\n", GetElem(La, i)); case 6:printf("输入单链表Lb的长度:");
scanf("%d", &n);
Lb = CreateLinkedListTail(n);
printf("该Lb链表中的元素为:");
output(Lb);
MergerList(La,Lb,Lc);
printf("\n合并后的链表为:");
output(La);
}
}
}。

相关文档
最新文档