69,369
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#include <stdlib.h>
#define NULL 0
typedef struct linknode
{
int data;
struct linknode *next;
}node;
node *p,*q,*s,*head;//定义全部变量
int j=0,i;
//主函数
void main()
{
int x,y,cord;
node *creat();
void print(node *head);
void insert(node *head,int x);//改
void search(node *head,int x);
int length(node *head);
void deletes(node * head,int x);
head=creat();
print(head);
do{
printf("\n 主菜单 \n");
printf(" 1 求链表长度 \n");
printf(" 2 插入一个元素 \n");
printf(" 3 查找一个元素 \n");
printf(" 4 删除一个元素 \n");
printf(" 0 结束程序运行 \n");
printf("-----------------------------------------\n");
printf(" 请输入您的选择(1, 2, 3, 4, 0)\n");
scanf("%d",&cord);
switch(cord)
{
case 1:printf("链表长度为j=%d",j=length(head));break;
case 2:
{
//printf("请输入要插入元素的位置x:");
//scanf("%d",&x);
printf("请输入插入的数据y:");
scanf("%d",&y);
insert(head,y);//改
print(head);
}break;
case 3:
{
printf("请输入要查找的元素x");
scanf("%d",&x);
search(head,x);
}break;
case 4:
{
printf("删除的数x=?");
scanf("%d",&x);
deletes(head,x);
print(head);
}break;
case 0:
{
exit(0);
}break;
}
}while(cord<=4&&cord>=0);
}
//*函数菜单
//建立一个单链表!
node * creat()
{
node *head,*p,*s;
int x = 1;//改
head=(node*)malloc(sizeof(node));
p=head;
printf("请输入链表数据!\n");
while(x!=0)
{
scanf("%d",&x);
s=(node*)malloc(sizeof(node));
s->data=x;
p->next=s;
p=s;
}
s = head;//加
head=head->next;
free(s);//加
p->next=NULL;
return(head);
}
//输出链表
void print(node *head)
{
node *p;
p=head;
printf("输出链表!\n");
if(head==NULL)
printf("链表为空!");
else
{
while(p->next!=NULL)
{
printf("%d->",p->data);
p=p->next;
}
printf("%d",p->data);// 输出链表结束标志!
}
printf("\n");
}
//*查找某个结点
void search(node *head,int x)
{
node *p;
p=head;
while(p->data!=x&&p!=NULL)//
p=p->next;
if(p!=NULL)
printf("找到了!\n");
else
printf("未找到!\n");
}
//求链表的长度
int length(node *head)
{
int n=0;
node *p;
p=head;
while(p!=NULL)
{
p=p->next;
n++;
}
return(n);
}
//插入某个结点
void insert(node *head,int y)
{
//node *p,*q;
s=(node*)malloc(sizeof( node));
s->data=y;
//q=head;
if(head != NULL)
{
s->next = head->next;
head->next = s;
}
/*p=head->next;
if(p!=NULL)
{
q=p;
p=p->next;
}
else
{
q->next=s;
s->next=p;
} */
}
//删除结点
void deletes(node * head,int x)
{
node *p,*q;
if(head==NULL) printf("链表为空!\n");
if(head->data==x)
{
p=head;
head=head->next;
free(p);
}
else
{
p=head;
while(p->next!=NULL&&p->next->data!=x) p=p->next;
if(p==NULL)
printf(" x 不存在!\n");
else
{
q=p->next;
p->next=q->next;
free(q);
}
}
}