链表的操作

/**********************************************
链表的操作
BY YQG.06.3.6
***********************************************/
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#ifndef FALSE
#define FALSE 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#define LENGTH sizeof(struct node)
typedef struct node
{
int elem;
struct node*next;
}list;

int InitList(list **p);
void DispList(list**p);
int empty_or_not(list**p);
int insertlist(list**p,int i,char lelem);
/*int locatelist(list*&p,int i,char&lelem);
int lengthlist(list*&p);
int deletelist(list*&p,int i,char&lelem);
void DestroyList(list**p);*/


void main()
{
list*linklist;
int tem=0;
char str;
if(!InitList(&linklist))
printf("error");
DispList(&linklist);
printf("/nInput the insert location(<%d):",tem);
scanf("%d",&tem);
printf("/nInput the data:");
scanf("%d",&str);
insertlist(&linklist,tem,str);
DispList(&linklist);
getch();
}

int InitList(list**head)
{
int n=0;
list*q,*p;
if((q=(list*)malloc(LENGTH))==NULL || ((*head)=(list*)malloc(LENGTH))==NULL)
return FALSE;
q->next=NULL;
(*head)->next=NULL;
p=(*head);
        printf("/nInput the list int number(End with 0):");
scanf("%d%*c",&(q->elem));/*创建第一个结点*/
p->next=q;
while(q->elem!=0)
{
p->next=q;/*尾插法*/
                p=q;
        if((q=(list*)malloc(LENGTH))==NULL)
printf("ERROR");
scanf("%d%*c",&(q->elem));
q->next=NULL;
}
return TRUE;
}

void DispList(list**head)
{
list*lp=(*head);
if(empty_or_not(&lp))
{
printf("it is empty!");
return;
}
while(lp->next!=NULL)
{
printf("%d  ",lp->next->elem);
lp=lp->next;
}
}

int empty_or_not(list**p)
{
return ((*p)->next==NULL);
}

int insertlist(list**p,int i,char lelem)
{
int j=0;
list*lp=(*p);
list*q=(list*)malloc(LENGTH);
if(i==0)
{
q->elem=lelem;
q->next=(*p)->next;
(*p)->next=q;
return TRUE;
}
while(lp->next!=NULL && jnext;
j++;
}
if((lp->next==NULL) && (j!= i-1))/*超过连链表的长度*/
{
free(q);
printf("error!");
return FALSE;
}
    q->elem=lelem;
q->next=lp->next;
    lp->next=q;
    return TRUE;
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值