linux 环境下单链表的定义及简单应用实现
刚开始学习 希望多多交流
#include <stdio.h>
#include <stdlib.h>
typedef int DataType; //定义一个结点结构体
typedef struct Node
{
DataType data;
struct Node *next;
}LNode;
void ListInitiate(LNode **head) //单链表初始化
{
*head = (LNode *)malloc(sizeof(LNode)); //申请头节点 ,head指示其地址
(*head)->next = NULL; //将头指针next置空
}
int ListLength(LNode *head) //求链表数据元素个数
{
LNode *p;
int length = 0;
p = head;
while(p->next != NULL)
{
p = p->next;
length++;
}
return length; //返回length的大小
}
int ListInsert(LNode *head,int i,DataType x) //单链表插入一个结点
{
LNode *p,*q;
int j = -1;
p = head;
while(p->next != NULL && j < i-1) //遍历到指向i-1的结点
{
p = p->next;
j ++;
}
if(j != i-1)
{
printf("iput i error..\n");
return 0;
}
q = (LNode *)malloc(sizeof(LNode)); //生成新结点
q -> data = x; //新结点数据赋值
q->next = p->next; //新结点指针指向原来链表指向的下一个结点
p->next = q; //i-1结点指针指向i结点变为指向新结点,完成插入
return 1;
}
int ListDelete(LNode *head,int i,DataType *x)//删除第i个结点
{
LNode *p,*q;
int j = -1;
p = head;
while(p->next != NULL && p->next->next != NULL && j < i-1)//遍历链表
{
p = p->next;
j ++;
}
if(j != i-1)
{
printf("delete error..\n");
return 0;
}
q = p->next; //将p指向的下一个结点赋给q
p->next = q->next; //将p指向下一个结点变为指向下下个结点
*x = q->data; //将q中数据赋值给*x
free(q); //释放掉q结点
return 1;
}
int ListGet(LNode *head,int i,DataType *x)//取链表元素
{
LNode *p;
p = head;
int j = -1;
while(p->next != NULL && j < i)
{
p = p->next;
j ++;
}
if(j != i)
{
printf("get error...\n");
return 0;
}
*x = p->data; //将第i个结点数据元素赋值给x
return 1;
}
void ListDestroy(LNode **head)//链表销毁
{
LNode *p,*q;
p = *head;
while(p != NULL)
{
q = p;
p = p->next;
free(q); //释放结点空间
}
*head = NULL; //头指针置空
}
int main()
{
LNode *head;
int i,x;
ListInitiate(&head); //链表初始化
for(i = 0; i < 10 ; i ++)
{
ListInsert(head,i,i+1); //插入数据元素
}
ListDelete(head,4,&x); //删除数据元素
for(i = 0 ; i < 9 ;i ++)
{
ListGet(head,i,&x); //取数据元素
printf("%d\t",x);
}
printf("\n");
ListDestroy(&head); //销毁链表
return 0;
} 路过看看 。。。。谢谢分享 加油! 感谢分享
页:
[1]