主题:数据结构第二个程序--链表!!写得不好哦
[b][size=4][color=FF00FF]我的blog,[url=http://www.9ite.cn]http://www.9ite.cn[/url]欢迎大家来踩[/color][/size][/b]
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
typedef struct node
{
int data;
struct node *next;
}Lnode,*Linklist;
Linklist Great_Linklist()
{
int x;
Linklist L=NULL;
Lnode *s;
scanf("%d",&x);
while(x!=0)
{
s=new Lnode;
s->data=x;
s->next=L;
L=s;
scanf("%d",&x);
}
return L;
}
Lnode *Get_Linklist(Linklist L,int i)
{
Lnode *s=L;
int j=0;
while(s->next!=NULL&&j<i)
{
s=s->next;
j++;
}
if(j==i)
return s;
else return NULL;
}
int Insert_Linklist(Linklist L,int i,int x)
{
Lnode *s,*p;
s=Get_Linklist(L,i-1);
if(s==NULL)
{
printf("第i-1个结点不存在!");
return 0;
}
else
{
p=new Lnode;
p->data=x;
p->next=s->next;
s->next=p;
return 1;
}
}
int Del_Linklist(Linklist L,int i)
{
Linklist q,s;
q=Get_Linklist(L,i-1);
if(q==NULL)
{
printf("第i-1个结点不存在!删除失败!");
return -1;
}
if(q->next==NULL)
{
printf("第i个结点不存在!删除失败!");
return 0;
}
s=q->next;
q->next=s->next;
free(s);
return 1;
}
void Print_Linklist(Linklist L)
{
Lnode *s=L;
while(s->next!=NULL)
{
printf("%d->",s->data);
s=s->next;
}
printf("%d\n",s->data);
}
void main()
{
Linklist L,q;
int k,flag,x,i;
do{
printf("\n\n\n");
printf("\t\t\t 链表子系统\n");
printf("\t\t\t******************************\n");
printf("\t\t\t** 1--建 表 **\n");
printf("\t\t\t** 2--插 入 **\n");
printf("\t\t\t** 3--删 除 **\n");
printf("\t\t\t** 4--查 找 **\n");
printf("\t\t\t** 5--打 印 **\n");
printf("\t\t\t** 0--返 回 **\n");
printf("\t\t\t******************************\n");
printf("\t\t\t 请选择菜单项(0-5):");
scanf("%d",&k);
switch(k)
{
case 1:
printf("请为表输入元素!\n");
L=Great_Linklist();
printf("\n表已建立!按任意键返回...");
getch();
system("cls");
break;
case 2:
printf("请输入要插入的元素x和位置i(x,i):");
scanf("%d,%d",&x,&i);
flag=Insert_Linklist(L,i,x);
if(flag==1)
printf("插入成功!按任意键返回...");
getch();
system("cls");
break;
case 3:
printf("请输入要删除的位置i:");
scanf("%d",&i);
flag=Del_Linklist(L,i);
if(flag==1)
printf("删除成功!按任意键返回...");
getch();
system("cls");
break;
case 4:
printf("请输入要查找的位置i:");
scanf("%d",&i);
q=Get_Linklist(L,i);
if(q==NULL)
printf("该结点不存在!");
else
printf("该位置的元素为:%d",q->data);
printf(" 按任意键返回...");
getch();
system("cls");
break;
case 5:
printf("该链表的元素为:\n");
Print_Linklist(L);
printf("按任意键返回....");
getch();
system("cls");
break;
}
}while(k!=0);
}
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#include "conio.h"
typedef struct node
{
int data;
struct node *next;
}Lnode,*Linklist;
Linklist Great_Linklist()
{
int x;
Linklist L=NULL;
Lnode *s;
scanf("%d",&x);
while(x!=0)
{
s=new Lnode;
s->data=x;
s->next=L;
L=s;
scanf("%d",&x);
}
return L;
}
Lnode *Get_Linklist(Linklist L,int i)
{
Lnode *s=L;
int j=0;
while(s->next!=NULL&&j<i)
{
s=s->next;
j++;
}
if(j==i)
return s;
else return NULL;
}
int Insert_Linklist(Linklist L,int i,int x)
{
Lnode *s,*p;
s=Get_Linklist(L,i-1);
if(s==NULL)
{
printf("第i-1个结点不存在!");
return 0;
}
else
{
p=new Lnode;
p->data=x;
p->next=s->next;
s->next=p;
return 1;
}
}
int Del_Linklist(Linklist L,int i)
{
Linklist q,s;
q=Get_Linklist(L,i-1);
if(q==NULL)
{
printf("第i-1个结点不存在!删除失败!");
return -1;
}
if(q->next==NULL)
{
printf("第i个结点不存在!删除失败!");
return 0;
}
s=q->next;
q->next=s->next;
free(s);
return 1;
}
void Print_Linklist(Linklist L)
{
Lnode *s=L;
while(s->next!=NULL)
{
printf("%d->",s->data);
s=s->next;
}
printf("%d\n",s->data);
}
void main()
{
Linklist L,q;
int k,flag,x,i;
do{
printf("\n\n\n");
printf("\t\t\t 链表子系统\n");
printf("\t\t\t******************************\n");
printf("\t\t\t** 1--建 表 **\n");
printf("\t\t\t** 2--插 入 **\n");
printf("\t\t\t** 3--删 除 **\n");
printf("\t\t\t** 4--查 找 **\n");
printf("\t\t\t** 5--打 印 **\n");
printf("\t\t\t** 0--返 回 **\n");
printf("\t\t\t******************************\n");
printf("\t\t\t 请选择菜单项(0-5):");
scanf("%d",&k);
switch(k)
{
case 1:
printf("请为表输入元素!\n");
L=Great_Linklist();
printf("\n表已建立!按任意键返回...");
getch();
system("cls");
break;
case 2:
printf("请输入要插入的元素x和位置i(x,i):");
scanf("%d,%d",&x,&i);
flag=Insert_Linklist(L,i,x);
if(flag==1)
printf("插入成功!按任意键返回...");
getch();
system("cls");
break;
case 3:
printf("请输入要删除的位置i:");
scanf("%d",&i);
flag=Del_Linklist(L,i);
if(flag==1)
printf("删除成功!按任意键返回...");
getch();
system("cls");
break;
case 4:
printf("请输入要查找的位置i:");
scanf("%d",&i);
q=Get_Linklist(L,i);
if(q==NULL)
printf("该结点不存在!");
else
printf("该位置的元素为:%d",q->data);
printf(" 按任意键返回...");
getch();
system("cls");
break;
case 5:
printf("该链表的元素为:\n");
Print_Linklist(L);
printf("按任意键返回....");
getch();
system("cls");
break;
}
}while(k!=0);
}