循环单链表基本操作

#include"stdio.h"#include<malloc.h>#include<stdlib.h>#defineMaxSize20#defineOverFlow-... #include"stdio.h"
#include <malloc.h>
#include<stdlib.h>
#define MaxSize 20
#define OverFlow -1
#define OK 1
#define Error -1
#define Null 0
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} Node,*LinkList;
int Init_LLinkList(LinkList *Head_pointer)//构造一个空表//
{
LinkList p;
p=(LinkList)malloc(sizeof(Node));
if(p==Null)
return OverFlow;
p->next=p;
*Head_pointer=p;
return OK;
}
int Insert_i(LinkList Head,ElemType x,int i)//在第i个结点之后插入//
{
Node *p,*q;
p=(LinkList)malloc(sizeof(Node));
if(p==Null)
return OverFlow;
p->data=x;
q=Head;
while(q->next!=Head && i>=0)//q从头指针开始指 直到指到i//
{
q=q->next;
i--;
}
if(q!=Head || i==0)//插入//
{
q->next=q->next;
q->next=p;
return OK;
}
return Error;
}
Node *Location_LinkList(LinkList Head,ElemType x)//查找制定元素x//
{
Node *p;
p=Head->next;//头结点无数据//
while(p!=Head)//未到链尾//
{
if(p->data==x)
return p;
p=p->next;

}
return NULL;//未找到 返回空指针//
}
int Delete_LLinkList(LinkList Head,ElemType x)
{
Node *p,*q;
q=Head;
p=Head;
p=p->next;
while(p->next!=Head)
{
if(p->data==x)
{
q->next=p->next;
free(p);
return OK;
}
q=p;
p=p->next;
}
return Error;
}
void Show_LLinkList(LinkList Head)//遍历线性表//
{
Node *p;
printf("\n");
p=Head->next;
if(p->next==p)
printf("空表");
while(p!=Head)
{
printf(" %d",p->data);
p=p->next;
}
}
void SetNull_LLinkList(LinkList Head)//清空//
{
Node *p,*q;
while(p!=Head)
{
q=p;
p=p->next;
free(q);
}
Head->next=Head;//设置头结点//
}
int Length_LinkList(LinkList Head)//求长度//
{
Node *p;
int sum=0;
p=Head->next;
while(p!=Head)
{
sum++;
p=p->next;
}
return sum;
}
void main()
{
LinkList Head;
int i;
Init_LLinkList(&Head);
for(i=0;i<=5;i++)
if(Insert_i(Head,i+1,i)!=OK) break;
Show_LLinkList(Head);
printf("\n链表的长度是%d%d",Length_LinkList(Head));
if(Location_LinkList(Head,3)!=NULL)
printf("\n找到来%d",3);
else
printf("\n没找到%d!");
Delete_LLinkList(Head,6);
Show_LLinkList(Head);
SetNull_LLinkList(Head);
}
提示无错 但是编译老是内存错误
展开
 我来答
百度网友6eed2f8
推荐于2016-05-16 · TA获得超过5082个赞
知道大有可为答主
回答量:3423
采纳率:0%
帮助的人:3810万
展开全部
#include"stdio.h"
#include <malloc.h>
#include<stdlib.h>
#define MaxSize 20
#define OverFlow -1
#define OK 1
#define Error -1
#define Null 0
typedef int ElemType;
typedef struct node
{
ElemType data;
struct node *next;
} Node,*LinkList;
int Init_LLinkList(LinkList *Head_pointer)//构造一个空表//
{
LinkList p;
p=(LinkList)malloc(sizeof(Node));
if(p==Null)
return OverFlow;
p->next=p;
*Head_pointer=p;
return OK;
}
int Insert_i(LinkList Head,ElemType x,int i)//在第i个结点之后插入//
{
Node *p,*q;
p=(LinkList)malloc(sizeof(Node));
if(p==Null)
return OverFlow;
p->data=x;
p->next=NULL;
q=Head;
while(q->next!=Head && i>=0)//q从头指针开始指 直到指到i//
{
q=q->next;
i--;
}
if(q!=Head || i==0)//插入//
{
p->next=q->next; //这地方你写错了!!!!
q->next=p;
return OK;
}
return Error;
}
Node *Location_LinkList(LinkList Head,ElemType x)//查找制定元素x//
{
Node *p;
p=Head->next;//头结点无数据//
while(p!=Head)//未到链尾//
{
if(p->data==x)
return p;
p=p->next;

}
return NULL;//未找到 返回空指针//
}
int Delete_LLinkList(LinkList Head,ElemType x)
{
Node *p,*q;
q=Head;
p=Head;
p=p->next;
while(p!=Head) //这地方应该是p,否则无法删除最后一个
{
if(p->data==x)
{
q->next=p->next;
free(p);
return OK;
}
q=p;
p=p->next;
}
return Error;
}
void Show_LLinkList(LinkList Head)//遍历线性表//
{
Node *p;
printf("\n");
p=Head->next;
if(p->next==p)
printf("空表");
while(p!=Head)
{
printf(" %d",p->data);
p=p->next;
}
}
void SetNull_LLinkList(LinkList Head)//清空//
{
Node *p,*q;
p=Head->next;//这你少一句初始化
while(p!=Head)
{
q=p;
p=p->next;
free(q);
}
Head->next=Head;//设置头结点//
}
int Length_LinkList(LinkList Head)//求长度//
{
Node *p;
int sum=0;
p=Head->next;
while(p!=Head)
{
sum++;
p=p->next;
}
return sum;
}
void main()
{
LinkList Head;
int i;
Init_LLinkList(&Head);
for(i=0;i<=5;i++)
if(Insert_i(Head,i+1,i)!=OK) break;
Show_LLinkList(Head);
printf("\n链表的度是%d",Length_LinkList(Head));
if(Location_LinkList(Head,3)!=NULL)
printf("\n找到来%d",3);
else
printf("\n没找到%d!");
Delete_LLinkList(Head,6);
Show_LLinkList(Head); SetNull_LLinkList(Head);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式