#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int n;
struct node *p;
}node;
typedef struct node * List;
List plist;
int size;
void Insert(List plist,int index,int x);
void Delete(List plist,int index);
void Search(List plist,int index);
void Update(List plist,int index,int x);
void ShowMenu();
void ShowList();
void Build(List plist);
int main(){
int op,x,y;
plist=malloc(sizeof(node));
if(plist!=NULL){
Build(plist);
printf("\n链表创建成功!\n");
ShowList();
ShowMenu();
scanf("%d",&op);
while(op!=5){
if(op==1){
printf("请输入插入位置(后)和数字:");
scanf("%d%d",&x,&y);
Insert(plist,x,y);
}
if(op==2){
printf("请输入删除的数字次序");
scanf("%d",&x);
Delete(plist,x);
}
if(op==3){
printf("请输入待查找元素的次序:");
scanf("%d",&x);
Search(plist,x);
}
if(op==4){
printf("请输入待修改元素次序和修改后大小:");
scanf("%d%d",&x,&y);
Update(plist,x,y);
}
printf("操作完成!\n");
ShowList();
ShowMenu();
scanf("%d",&op);
}
}
else printf("创建链表所需空间不足!\n");
return 0;
}
void ShowMenu(){
printf("---------------操作码--------------\n");
printf("1.插入\t2.删除\n");
printf("3.查找\t4.修改\n");
printf("5.退出\n");
printf("-----------------------------------\n");
printf("请输入操作:");
}
void ShowList(){
printf("此时链表元素:");
List current=plist->p;
for(int i=0;i<size;i++){
printf("%d ",current->n);
current=current->p;
}
printf("\n\n");
}
void Build(List plist){
int n,t;
List current=plist;
printf("请输入元素个数:");
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&t);
List p;
p=malloc(sizeof(node));
p->n=t,p->p=p;
current->p=p;
current=current->p;
}
size=n;
}
void Insert(List plist,int index,int x){
List current=plist;
for(int i=0;i<index;i++){
current=current->p;
}
List p=malloc(sizeof(node));
p->n=x,p->p=current->p;
current->p=p;
size++;
}
void Delete(List plist,int index){
List current=plist;
for(int i=0;i<index-1;i++){
current=current->p;
}
List p=current->p;
current->p=p->p;
free(p);
size--;
}
void Search(List plist,int index){
List current=plist;
for(int i=0;i<index;i++){
current=current->p;
}
printf("该元素是:%d\n",current->n);
}
void Update(List plist,int index,int x){
List current=plist;
for(int i=0;i<index;i++){
current=current->p;
}
current->n=x;
}