《數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版 單鏈表源代碼》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)結(jié)構(gòu)C語(yǔ)言版 單鏈表源代碼(10頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
/*單鏈表的各種操作*/
#include
#include
#define null 0
typedef int ElemType; /* 字符型數(shù)據(jù)*/
struct LNode
{
ElemType data;
struct LNode *next;
};
void setnull(struct LNode **p);
int length (struct LNode **p);
ElemType get(struct LNode **p,int i);
void insert(struct LNod
2、e **p,ElemType x,int i);
void dele(struct LNode **p,int i);
void display(struct LNode **p);
int locate(struct LNode **p,ElemType x);
void main()
{
struct LNode *head,*q; /*定義靜態(tài)變量*/
int select,x1,x2,x3,x4;
int i,n;
int m,g;
char e,y;
setnull(&head); /*建設(shè)鏈表并設(shè)置為空表*/
printf("請(qǐng)輸
3、入數(shù)據(jù)長(zhǎng)度: ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
printf("將數(shù)據(jù)插入到單鏈表中: ");
scanf("%d",&y);
insert(&head,y,i);
} /*插入數(shù)據(jù)到鏈表*/
display(&head); /*顯示鏈表所有數(shù)據(jù)*/
printf("select 1 求長(zhǎng)度 length()\n");
printf("select 2 取結(jié)點(diǎn) get()\n");
printf("select 3 求值查找 locate()\n");
pri
4、ntf("select 4 刪除結(jié)點(diǎn) delete()\n");
printf("select 0 退出\n");
printf("input your select: ");
scanf("%d",&select);
while(select!=0)
{switch(select)
{
case 1:
{
x1=length(&head);
printf("輸出單鏈表的長(zhǎng)度%d ",x1);
display(&head);
}break;
case 2:
{
5、 printf("請(qǐng)輸入要取得結(jié)點(diǎn): ");
scanf("%d",&m);
x2=get(&head,m);
printf("%d",x2);
display(&head);
}break;
case 3:
{
printf("請(qǐng)輸入要查找的數(shù)據(jù): ");
scanf("%d",&e);
x3=locate(&head,e);
printf("%d",x3);
di
6、splay(&head);
}break;
case 4:
{
printf("請(qǐng)輸入要?jiǎng)h除的結(jié)點(diǎn): ");
scanf("%d",&g);
dele(&head,g);
display(&head);
}break;
}
printf("select 1 求長(zhǎng)度 length()\n");
printf("select 2 取結(jié)點(diǎn) get()\n");
printf("select 3 求值查找 locate()\n");
prin
7、tf("select 4 刪除結(jié)點(diǎn) delete()\n");
printf("select 0 退出\n");
printf("input your select: ");
scanf("%d",&select);
}
}
void setnull(struct LNode **p)
{
*p=null;
}
int length (struct LNode **p)
{
int n=0;
struct LNode *q=*p;
while (q!=null)
{
n++;
q=q->n
8、ext;
}
return(n);
}
ElemType get(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p;
while (jnext;
j++;
}
if(q!=null)
return(q->data);
else
{printf("位置參數(shù)不正確!\n");
return 0;}
}
int locate(struct LNode **p,ElemType x)
{
i
9、nt n=0;
struct LNode *q=*p;
while (q!=null&&q->data!=x)
{
q=q->next;
n++;
}
if(q==null)
return(-1);
else
return(n+1);
}
void insert(struct LNode **p,ElemType x,int i)
{
int j=1;
struct LNode *s,*q;
s=(struct LNode *)malloc(sizeof(struct LNode));
s-
10、>data=x;
q=*p;
if(i==1)
{
s->next=q;
*p=s;
}
else
{
while(jnext!=null)
{
q=q->next;
j++;
}
if(j==i-1)
{
s->next=q->next;
q->next=s;
}
else
printf("位置參數(shù)不正確!\n");
}
}
11、
void dele(struct LNode **p,int i)
{
int j=1;
struct LNode *q=*p,*t;
if(i==1)
{
t=q;
*p=q->next;
}
else
{
while(jnext!=null)
{
q=q->next;
j++;
}
if(q->next!=null&&j==i-1)
{
t=q->next;
q->next
12、=t->next;
}
else
printf("位置參數(shù)不正確!\n");
}
if(t!=null)
free(t);
}
void display(struct LNode **p)
{
struct LNode *q;
q=*p;
printf("單鏈表顯示: ");
if(q==null)
printf("鏈表為空!");
else if (q->next==null)
printf("%d\n",q->data);
else
{
while(q->next!=null)
{
printf("%d->",q->data);
q=q->next;
}
printf("%d",q->data);
}
printf("\n");
}