有头单向链表
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node* next;
}link_node_t;
/* 创建空链表 */
link_node_t* createEmptynode ()
{
link_node_t* p = malloc(sizeof(link_node_t));
if(p == NULL)
{
printf("goto bad\n");
return NULL;
}
p->next = NULL;
}
/* 删除指定位置元素 */
void deletelink_node (link_node_t* p,int post)
{
int i;
if(post < 1 || post > getlenthlink(p))
{
printf("删除失败\n");
return ;
}
link_node_t* ptail;
for(i=0;i<post-1;i++)
{
p=p->next;
}
ptail = p->next;
p->next = ptail->next;
free(ptail);
}
/* 查找指定元素位置 */
void getpostlinknode (link_node_t* p,int x)
{
int i=0;
while(p->next!=NULL)
{
p=p->next;
i++;
if(p->data == x)
{
printf("位置在第%d个\n",i);
return ;
}
}
}
/* 判断是否为空 */
int isEmptylinknode (link_node_t* p)
{
return p->next == NULL ;
}
/* 指定位置插入元素 */
void insertintolink_node (link_node_t* p,int post,int x)
{
int i;
if(post<1 || post > getlenthlink(p)+1)
{
printf("插入失败\n");
return ;
}
link_node_t* pnew = malloc(sizeof(link_node_t));
if(p == NULL)
{
printf("goto bad\n");
return ;
}
pnew->data = x;
pnew->next = NULL;
for(i=0;i<post-1;i++)
{
p = p->next;
}
pnew->next = p->next;
p->next = pnew;
}
/* 清空表 */
void clearlinknode (link_node_t* p)
{
while(p->next!=NULL)
{
link_node_t* k = p->next;
p->next = k->next;
free(k);
}
}
/* 遍历链表 */
void showlinknode (link_node_t* p)
{
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}
/* 求表长 */
int getlenthlink (link_node_t* p)
{
int x=0;
while(p->next!=NULL)
{
p=p->next;
x++;
}
printf("长度为%d\n",x);
return x;
}
int main(int argc, const char *argv[])
{
link_node_t* p = createEmptynode();
insertintolink_node(p,1,11);
insertintolink_node(p,2,22);
insertintolink_node(p,3,33);
insertintolink_node(p,4,44);
insertintolink_node(p,5,55);
showlinknode(p);
return 0;
}