#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct node{
int data;
struct node *next;
}
LinkList;
LinkList * create()
{
int t;
LinkList *head,*s,*r;
head=(LinkList *)malloc(sizeof(LinkList));
r=head;
printf("请输入数字序列产生的单链表,以-1结束。\n");
scanf("%d",&t);
while(t!=-1)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=t;
r->next=s;
r=s;
scanf("%d",&t);
}
r->next=NULL;
printf("链表创建完毕。");
return head;
}
void output(LinkList *head)
{
LinkList *p;
printf("\n链表中的结点值为:");
for(p=head->next;p!=NULL;p=p->next)
{
printf("%4d",p->data);
}
printf("\n");
}
void searchByValue(LinkList *head)
{
int x,j=1;
LinkList *p;
if(head->next==NULL)
{
printf("链表为空!");
return;
}
printf("\n请输入要查找的结点值x(1--n): ");
scanf("%d",&x);
p=head->next;
while(p)
{
if(p->data==x)
{
printf("第%4d号的结点为%2d",j,x);
return;
}
p=p->next;
j++;
}
printf("\n 结点未找到!");
}
void deleteByValue(LinkList *head)
{
int x;
LinkList *p,*q;
if(head->next==NULL)
{
printf("链表为空!");
return;
}
printf("\n请输入要删除的结点值x(1--n): ");
scanf("%d",&x);
q=head;
p=head->next;
while(p)
{
if(p->data==x) break;
q=p;
p=p->next;
}
if(p==NULL)
printf("\n 结点未找到!");
else
{
q->next=p->next;
free(p);
printf("\n 结点被删除!");
}
}
void insertNode(LinkList *head)
{
int x,i,j=0;
LinkList *p,*s;
printf("\n 请输入新结点要添加的位置i: ");
scanf("%d",&i);
p=head;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL||i<1)
{
printf("\n位置无效!");
return;
}
printf("\n 请输入新结点的位置x: ");
scanf("%d",&x);
s=(LinkList *)malloc(sizeof(LinkList));
s->data=x;
s->next=p->next;
p->next=s;
printf("\n 插入成功!");
}
void menu()
{
system("cls");
printf("\n");
printf("\n");
printf("|--------------------------------|\n");
printf("| 请输入选项编号(0 ~ 5): |\n");
printf("|--------------------------------|\n");
printf("| 1--建立链表 |\n");
printf("| 2--查找单链表中值为x的结点 |\n");
printf("| 3--删除单链表中值为x的结点 |\n");
printf("| 4--添加新的结点 |\n");
printf("| 5--输出链表 |\n");
printf("| 0--退出 |\n");
printf("|--------------------------------|\n");
printf("\n");
printf("\n");
printf(" 请 选 择 : ");
}
void main()
{
int selection;
LinkList *head;
do
{
if(selection==0)break;
menu();
printf(" ");
scanf("%d",&selection);
switch(selection)
{
case 1:head=create();break;
case 2:searchByValue(head);break;
case 3:deleteByValue(head);break;
case 4:insertNode(head);break;
case 5:output(head);break;
case 0:break;
default:printf("\n %d为非法选项!\n",selection);
}
printf("按任意键继续......");
getchar();getchar();
}
while(1==1);
}
#include<stdlib.h>
#include<conio.h>
typedef struct node{
int data;
struct node *next;
}
LinkList;
LinkList * create()
{
int t;
LinkList *head,*s,*r;
head=(LinkList *)malloc(sizeof(LinkList));
r=head;
printf("请输入数字序列产生的单链表,以-1结束。\n");
scanf("%d",&t);
while(t!=-1)
{
s=(LinkList *)malloc(sizeof(LinkList));
s->data=t;
r->next=s;
r=s;
scanf("%d",&t);
}
r->next=NULL;
printf("链表创建完毕。");
return head;
}
void output(LinkList *head)
{
LinkList *p;
printf("\n链表中的结点值为:");
for(p=head->next;p!=NULL;p=p->next)
{
printf("%4d",p->data);
}
printf("\n");
}
void searchByValue(LinkList *head)
{
int x,j=1;
LinkList *p;
if(head->next==NULL)
{
printf("链表为空!");
return;
}
printf("\n请输入要查找的结点值x(1--n): ");
scanf("%d",&x);
p=head->next;
while(p)
{
if(p->data==x)
{
printf("第%4d号的结点为%2d",j,x);
return;
}
p=p->next;
j++;
}
printf("\n 结点未找到!");
}
void deleteByValue(LinkList *head)
{
int x;
LinkList *p,*q;
if(head->next==NULL)
{
printf("链表为空!");
return;
}
printf("\n请输入要删除的结点值x(1--n): ");
scanf("%d",&x);
q=head;
p=head->next;
while(p)
{
if(p->data==x) break;
q=p;
p=p->next;
}
if(p==NULL)
printf("\n 结点未找到!");
else
{
q->next=p->next;
free(p);
printf("\n 结点被删除!");
}
}
void insertNode(LinkList *head)
{
int x,i,j=0;
LinkList *p,*s;
printf("\n 请输入新结点要添加的位置i: ");
scanf("%d",&i);
p=head;
while(p&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL||i<1)
{
printf("\n位置无效!");
return;
}
printf("\n 请输入新结点的位置x: ");
scanf("%d",&x);
s=(LinkList *)malloc(sizeof(LinkList));
s->data=x;
s->next=p->next;
p->next=s;
printf("\n 插入成功!");
}
void menu()
{
system("cls");
printf("\n");
printf("\n");
printf("|--------------------------------|\n");
printf("| 请输入选项编号(0 ~ 5): |\n");
printf("|--------------------------------|\n");
printf("| 1--建立链表 |\n");
printf("| 2--查找单链表中值为x的结点 |\n");
printf("| 3--删除单链表中值为x的结点 |\n");
printf("| 4--添加新的结点 |\n");
printf("| 5--输出链表 |\n");
printf("| 0--退出 |\n");
printf("|--------------------------------|\n");
printf("\n");
printf("\n");
printf(" 请 选 择 : ");
}
void main()
{
int selection;
LinkList *head;
do
{
if(selection==0)break;
menu();
printf(" ");
scanf("%d",&selection);
switch(selection)
{
case 1:head=create();break;
case 2:searchByValue(head);break;
case 3:deleteByValue(head);break;
case 4:insertNode(head);break;
case 5:output(head);break;
case 0:break;
default:printf("\n %d为非法选项!\n",selection);
}
printf("按任意键继续......");
getchar();getchar();
}
while(1==1);
}