编程最难的问题是有编程的思路,有的思路便可到达成功彼岸,所以想编程先捋顺思路再出手。
下边是我的链表的思路:
(1)创建一个空单向链表
(2)指定位置插入元素
(3)求表长
(4)遍历链表
(5)删除指定位置元素
(6)判断链表是否为空
(7)清空链表
(8)查找指定数据的位置
程序如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node_t
{
int data;
struct node_t* next;
}link_node_t;
link_node_t* createEmptylink()
{
link_node_t* p = malloc(sizeof(link_node_t));
if(p == NULL)
{
printf("malloc failed!!\n");
return NULL;
}
p -> next = NULL;
return p;
}
int insertIntolink(link_node_t* p,int post,int x)
{
if(post < 1 || post > getLenglink(p) + 1)
{
printf("insertIntolink failed!!\n");
return -1;
}
int i;
for(i = 0; i < post-1;i++)
{
p = p -> next;
}
link_node_t* pnew = malloc(sizeof(link_node_t));
if(pnew == NULL)
{
printf("malloc failed!!\n");
return -1;
}
pnew -> data = x;
pnew -> next = NULL;
pnew -> next = p -> next;
p -> next = pnew;
}
void showlink(link_node_t* p)
{
while(p -> next != NULL)
{
p = p -> next;
printf("%d ",p -> data);
}
printf("\n");
}
int getLenglink(link_node_t* p)
{
int len = 0;
while(p->next != NULL)
{
p = p -> next;
len++;
}
return len;
}
int isEmptylink(link_node_t* p)
{
return p -> next == NULL;
}
int deleteFromlink(link_node_t* p,int post)
{
int i;
for(i = 0; i < post -1; i++)
{
p = p -> next;
}
link_node_t* q = p -> next;
p->next = q->next;
free(q);
q = NULL;
}
void cleanlink(link_node_t* p)
{
while(p -> next != NULL)
{
link_node_t* q = p -> next;
p->next = q->next;
free(q);
q = NULL;
}
}
int searchlink(link_node_t* p,int x)
{
int i = 0;
while(p -> next != NULL)
{
p = p -> next;
i++;
if(p->data == x)
return i;
}
return -1;
}
int main(int argc, const char *argv[])
{
link_node_t* p = createEmptylink();
insertIntolink(p,1,11);
insertIntolink(p,2,22);
insertIntolink(p,3,33);
insertIntolink(p,4,44);
insertIntolink(p,5,55);
printf("len is %d\n",getLenglink(p));
deleteFromlink(p,2);
printf("i is %d\n",searchlink(p,55));
// cleanlink(p);
showlink(p);
return 0;
}
本文介绍了如何使用C语言实现单向链表的基本操作,包括创建空链表、指定位置插入元素、计算链表长度、遍历链表、删除指定位置元素、判断链表是否为空、清空链表以及查找指定数据的位置。示例代码详细展示了每个操作的实现过程。
5万+





