数据结构-单链表

ContractedBlock.gif ExpandedBlockStart.gif Code
#include<stdio.h>            
#include
<stdlib.h>            
#define flag 0            
typedef 
struct node            
{            
int data;            
struct node *next;            
} LNode,
*LinkList;            
LinkList InitLinkList()            
{            
LinkList L;            
LNode 
*s;            
int x;            
L
->data=NULL;            
L
->next=NULL;            
scanf(
"%d",&amp;x);            
while(x!=flag)            
{            
s
=(LNode*)malloc(sizeof(LNode));            
s
->data=x;            
s
->next=L;            
L
=s;            
scanf(
"%d",&amp;x);            
}            
return L;            
}            
void DispLinkList(LinkList L)            
{            
LNode 
*p=L;            
while(p->next!=NULL)            
{            
printf(
"%5d",p->data);            
p
=p->next;            
}            
printf(
"\n");            
           
}            
LNode 
*LocLinkList(LinkList L,int pos)            
{            
LNode 
*p=L;            
int j=0;            
while(p->next&amp;&amp;j<pos)            
{p
=p->next;            
j
++;            
}            
if(j==pos)            
return p;            
else           
return NULL;            
}            
int InsLinkList(LinkList L,int pos,int e)            
{            
LNode 
*p=L,*s;            
p
=LocLinkList(L,pos-1);            
if(p==NULL)            
{            
printf(
"haha,error");            
return 0;            
}            
else           
{            
s
=(LNode*)malloc(sizeof(LNode));            
s
->data=e;            
s
->next=p->next;            
p
->next=s;            
return 1;            
}            
}            
int DelLinkList(LinkList L,int pos)            
{            
LinkList p,s;            
p
=LocLinkList(L,pos-1);            
if(p==NULL)            
{printf(
"there is no data");            
return -1;            
}            
else           
if (p->next==NULL)            
{printf(
"there is no data");            
return 0;            
}            
else           
{            
s
=p->next;            
p
->next=s->next;            
free(s);            
}            
return 1;            
}            
void menu()            
{            
printf(
"0----exit\n");            
printf(
"1----locate\n");            
printf(
"2----insert\n");            
printf(
"3----delete\n");            
}            
           
void main()            
{            
LinkList head;            
LNode 
*temp;            
int MenuNumber;            
int pos,e;            
printf(
"please input the initData:\n");            
head
=InitLinkList();            
DispLinkList(head);            
menu();            
scanf(
"%d",&amp;MenuNumber);            
while (MenuNumber!=0)            
{            
switch(MenuNumber)            
{            
case 1:            
printf(
"please input what you want to locate:\n");            
scanf(
"%d",&amp;pos);            
temp
=LocLinkList(head,pos);            
printf(
"%d\n",temp->data);            
break;            
case 2:            
printf(
"please input what you want to insert:\n");            
scanf(
"%d%d",&amp;pos,&amp;e);            
InsLinkList(head,pos,e);            
DispLinkList(head);            
break;            
case 3:            
printf(
"please input what you want to delete:\n");            
scanf(
"%d",&amp;pos);            
DelLinkList(head,pos);            
DispLinkList(head);            
break;            
default:printf("error,^^^\n");            
}            
scanf(
"%d",&amp;MenuNumber);            
}            

转载于:https://www.cnblogs.com/fancing/archive/2009/11/22/1608293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值