最近在看数据结构,练习单链表的基本操作,没什么难度,算是做个记录吧。
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//单链表的初始化增删插 date 2015/3/27
//定义单链表
typedef struct Node{
int data;
struct Node * next;
}Node,* p_Node;
void init_Node(Node &*); //初始化一个结点为空的链表
void add_Node_from_head(p_Node ,int );//从头部位置添加结点
void add_Node_in_pos(p_Node,int,int);//在指定位置添加结点
void delete_Node_in_pos(p_Node ,int);//在指定位置删除结点
int get_Node_length(p_Node);//得到链表的结点数
void show_Node(p_Node);//输出结点信息
int main(void)
{
Node node;
p_Node p = &node;
init_Node(p);
add_Node_from_head(p,5);
add_Node_from_head(p,3);
add_Node_from_head(p,2);
add_Node_in_pos(p,3,66);
delete_Node_in_pos(p,1);
show_Node(p);
return 0;
}
void delete_Node_in_pos(Node * L ,int pos)
{
p_Node p = L;
int j = 0 ;
while(p && j < pos - 1)
{
p = p->next;
j++;
}
if(p == NULL || j > pos)
{
printf("pos错误");
exit(-1);
}
p_Node delete_Node = p->next;
p->next = delete_Node->next;
free(delete_Node);
}
void add_Node_in_pos(Node * L,int pos,int val)
{
int j = 0;
p_Node p = L;
while(p && j < pos - 1)
{
p = p->next;
j++;
}
if(p == NULL || j > pos)
{
printf("pos错误");
exit(-1);
}
p_Node newNode = (p_Node)malloc(sizeof(Node));
newNode->data = val;
newNode->next = p->next;
p->next = newNode;
}
int get_Node_length(Node * L)
{
int i = 0;
if(NULL == L)
{
printf("不存在的链表");
exit(-1);
}
while(L->next != NULL)
{
L = L->next;
i++;
}
return i;
}
void show_Node(Node * L)
{
p_Node p ;
p = L->next;
while(p != NULL)
{
printf("%d\n",p->data);
p = p->next;
}
}
void add_Node_from_head(Node * L ,int val)
{
if(NULL == L || NULL == val)
{
printf("不存在的链表或数据");
exit(-1);
}
p_Node p = (p_Node)malloc(sizeof(Node));
if(NULL == p)
{
printf("申请内存空间失败\n");
exit(-1);
}
p->data = val;
p->next = L->next;
L->next = p;
}
void init_Node(Node *& p)
{
p = (p_Node)malloc(sizeof(Node));
if(NULL == p)
{
printf("申请内存空间失败\n");
exit(-1);
}
p->next = NULL;
}