⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档 (2).txt

📁 链表的基本插入删除等功能的实现
💻 TXT
字号:
#include<stdio.h> 
#include<malloc.h> 

#define OK 1 
#define ERROR 0 


typedef struct LNode{   //建立节点
int data; 
struct LNode *next; 
}LNode,*LinkList; 


LinkList CreateList(int n); 
int ListInsert(LinkList L,int i,int e); 
int ListDelete(LinkList L,int i); 
void Display(LinkList L); 


main() 
{ 
int n; 
int i,e; 
int choose=0; 
LinkList L; 
printf("\n********* 程序开始前,先创建单链表 ************\n"); 
printf("请输入你要创建单链表结点数 :"); 
scanf("%d",&n); 
L=CreateList(n); 
printf("\n链表创建成功,输出如下:\n"); 

Display(L); 

while(choose!=3) 
{ 
choose=0; 
printf("\n你可以对单链表进行的操作如下 :\n"); 
printf("1. 插入\n2. 删除\n3. 退出\n"); 
while(choose!=1&&choose!=2&&choose!=3) 
{ 
printf("请输入 1 或 2 或 3 选择 插入 或 删除 或 退出:"); 
scanf("%d",&choose); 
if(choose!=1&&choose!=2&&choose!=3) printf("输入错误,请重新输入\n"); 
} 

//printf(" Check choose %d\n",choose); 

if(choose==1) 
{ 
while(1) 
{ 
printf("\n单链表插入前为:\n"); 
Display(L); 
printf("请输入要插入的数:"); 
scanf("%d",&e); 
printf("请输入要插入的位置:"); 
scanf("%d",&i); 
if(ListInsert(L,i,e)==1) { printf("\n单链表插入后为:\n"); Display(L); break;} 
else printf("输入的插入位置错误,请重试\n"); 
} 
} 
else if(choose==2) 
{ 
while(1) 
{ 
printf("\n单链表删除前为:\n"); 
Display(L); 
printf("请输入删除的结点的序号:"); 
scanf("%d",&i); 
if(ListDelete(L,i)==1) { printf("\n单链表删除后为:\n"); Display(L); break; } 
else printf("输入的结点序号错误,请重试\n"); 
} 
} 
else if(choose==3) 
{ 
printf("\n链表最后为:\n"); 
Display(L); 
continue; 
} 
} 



} 

LinkList CreateList(int n) 
{ 
int i,m; 
LinkList L,p,s; 
L=(LinkList)malloc(sizeof(LNode)); 
L->data=n; 
p=L; 
for(i=1;i<=n;i++) 
{ 
printf("请输入第%d个结点的值 :",i); 
scanf("%d",&m); 
s=(LinkList)malloc(sizeof(LNode)); 
s->data=m; 
s->next=NULL; 
p->next=s; 
p=s; 
} 

return L; 
} 




int ListInsert(LinkList L,int i,int e) 
{ 
int j=0; 
LinkList p,s; 
p=L; 
while(p!=NULL&&j<i-1) { p=p->next; j++;} 
if(p==NULL||j>i-1) { printf("插入位置错误"); return ERROR; } 
s=(LinkList)malloc(sizeof(LNode)); 
s->data=e; 
s->next=p->next; 
p->next=s; 

L->data++; 

return OK; 
} 

int ListDelete(LinkList L,int i) 
{ 
int j=0; 
LinkList p,temp; 
p=L; 
while(p!=NULL&&j<i-1) { p=p->next; j++; } 
if(p==NULL||j>i-1) { printf("删除位置错误"); return ERROR; } 
temp=p->next; 
p->next=p->next->next; 
free(temp); 

L->data--; 

return OK; 

} 

void Display(LinkList L) 
{ 
int i,n; 
LinkList p; 
n=L->data; 
p=L->next; 
printf("\n开始输出链表\n"); 
printf("链表共有 %d 个结点,下面是各个结点的值 :\n",n); 
for(i=1;i<=n;i++) 
{ 
printf("结点 %d 的值 : %d\n",i,p->data); 
p=p->next; 
} 
printf("链表输出完毕\n\n"); 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -