单链表的实现
来源:互联网 发布:网络推广怎么安排工作 编辑:程序博客网 时间:2024/05/22 04:52
typedef struct Node
{
DataType data;
struct Node *next;
}ListNode, *LinkList;
void InitList(LinkList *head)
{
if( (*head = (LinkList)malloc(sizeof(LinkNode))) == NULL)
exit(-1);
(*head)->next = NULL;
}
int ListEmpty(LinkList head)
{
if(head->next == NULL)
return 1;
else
return 0;
}
ListNode *Get(LinkList head, int i)
{
listNode *p;
int j;
if(ListEmpty(head))
return NULL;
if(i<1)
return NULL;
j=0;
p=head;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
ListNode *LocateElem(LinkList head, DataType e)
{
ListNode *p;
p=head->next;
while(p)
{
if(p->data != e)
p=p->next;
else
break;
}
return p;
}
int LocatePos(LinkList head, DataType e)
{
ListNode *p;
int i;
if(listEmpty(head))
return 0;
p=head->next;
i=1;
while(p)
{
if(p->data == e)
return i;
else
{
p=p->next;
i++;
}
}
if(!p)
return 0;
}
int InsertList(LinkList head, int i, DataType e)
{
ListNode *p,*pre;
int j;
pre=head;
j=0;
while(pre->next!=NULL && j<i-1)
{
pre=pre->next;
j++;
}
if(j!=i-1)
{
printf("插入位置错");
return 0;
}
if( (p = (LinkNode*)malloc(sizeof(LinkNode))) == NULL)
exit(-1);
p->data = e;
p->next = pre->next;
pre->next = p;
return 1;
}
int DeleteList(LinkList head, int i, DataType *e)
{
ListNode *pre,*p;
int j;
pre= head;
j=0;
while(pre->next!=NULL&&pre->next->next!=NULL&&j<i-1)
{
pre=pre->next;
j++;
}
if(j!=i-1)
{
printf("删除位置错误");
return 0;
}
p=pre->next;
*e = p->data;
pre->next = p->next;
free(p);
return 1;
}
int ListLength(LinkList head)
{
ListNode *p;
int count = 0;
p=head;
while(p->next != NULL)
{
p=p->next;
count++;
}
return count;
}
void DestroyList(LinkList head)
{
ListNode *p,*q;
p=head;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
}
{
DataType data;
struct Node *next;
}ListNode, *LinkList;
void InitList(LinkList *head)
{
if( (*head = (LinkList)malloc(sizeof(LinkNode))) == NULL)
exit(-1);
(*head)->next = NULL;
}
int ListEmpty(LinkList head)
{
if(head->next == NULL)
return 1;
else
return 0;
}
ListNode *Get(LinkList head, int i)
{
listNode *p;
int j;
if(ListEmpty(head))
return NULL;
if(i<1)
return NULL;
j=0;
p=head;
while(p->next!=NULL&&j<i)
{
p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
ListNode *LocateElem(LinkList head, DataType e)
{
ListNode *p;
p=head->next;
while(p)
{
if(p->data != e)
p=p->next;
else
break;
}
return p;
}
int LocatePos(LinkList head, DataType e)
{
ListNode *p;
int i;
if(listEmpty(head))
return 0;
p=head->next;
i=1;
while(p)
{
if(p->data == e)
return i;
else
{
p=p->next;
i++;
}
}
if(!p)
return 0;
}
int InsertList(LinkList head, int i, DataType e)
{
ListNode *p,*pre;
int j;
pre=head;
j=0;
while(pre->next!=NULL && j<i-1)
{
pre=pre->next;
j++;
}
if(j!=i-1)
{
printf("插入位置错");
return 0;
}
if( (p = (LinkNode*)malloc(sizeof(LinkNode))) == NULL)
exit(-1);
p->data = e;
p->next = pre->next;
pre->next = p;
return 1;
}
int DeleteList(LinkList head, int i, DataType *e)
{
ListNode *pre,*p;
int j;
pre= head;
j=0;
while(pre->next!=NULL&&pre->next->next!=NULL&&j<i-1)
{
pre=pre->next;
j++;
}
if(j!=i-1)
{
printf("删除位置错误");
return 0;
}
p=pre->next;
*e = p->data;
pre->next = p->next;
free(p);
return 1;
}
int ListLength(LinkList head)
{
ListNode *p;
int count = 0;
p=head;
while(p->next != NULL)
{
p=p->next;
count++;
}
return count;
}
void DestroyList(LinkList head)
{
ListNode *p,*q;
p=head;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
}
0 0
- 单链表的基础实现
- 数据结构-单链表的实现
- 循环单链表的实现
- 单链表的手动实现
- 单链表的操作实现
- 一个单链表的实现
- C++实现的单链表
- C#单链表的实现
- 简洁的单链表实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- 单链表的实现
- Java单链表的实现
- js 实现的单链表
- 单链表的实现
- 单链表的实现。。。。。。。
- MySQL里获取当前week、month、quarter的第一天/最后一天
- JavaScript push() 方法
- Android实战技巧:如何在ScrollView中嵌套ListView
- 1117
- Jackson 概要学习笔记
- 单链表的实现
- C#截图
- tx:method 有关的设置
- js里遍历json数据的一个实例
- 关于为何在OnInitDialog函数中画图不能显示的解答
- ungetc
- Ubuntu下初学ROS时所遇小问题
- 紫外线消毒器:明渠式Photoscience紫外线消毒器
- endgrent