用c实现数据结构线性表的功能
时间: 2023-06-10 19:04:14 浏览: 58
可以使用C语言来实现线性表的功能,具体实现方式如下:
1. 定义一个结构体,用于表示线性表的节点,包括数据域和指向下一个节点的指针域;
2. 定义一个头节点,用于记录线性表的长度,并指向第一个节点;
3. 实现插入节点的功能,可以在头部、尾部或指定位置插入节点;
4. 实现删除节点的功能,可以删除指定位置的节点,同时将节点的前一个节点和后一个节点连接起来;
5. 实现查找节点的功能,可以按照数据域或下标来查找节点;
6. 实现修改节点数据的功能,可以按照下标或数据域来修改节点的数据。
下面是一个简单的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node *next;
} Node;
Node *head = NULL;
int insert_node(int position, int data)
{
int i;
Node *prev, *curr;
Node *new_node = malloc(sizeof(Node));
if(!new_node)
return -1;
new_node->data = data;
prev = NULL;
curr = head;
for(i=1; i<position; i++)
{
if(!curr)
break;
prev = curr;
curr = curr->next;
}
if(i != position)
{
free(new_node);
return -1;
}
if(prev)
prev->next = new_node;
new_node->next = curr;
if(!prev)
head = new_node;
return 0;
}
int delete_node(int position)
{
int i;
Node *prev, *curr;
if(!head)
return -1;
prev = NULL;
curr = head;
for(i=1; i<position; i++)
{
if(!curr)
break;
prev = curr;
curr = curr->next;
}
if(i != position || !curr)
return -1;
if(prev)
prev->next = curr->next;
else
head = curr->next;
free(curr);
return 0;
}
Node *find_node_by_position(int position)
{
int i;
Node *curr = head;
for(i=1; i<=position; i++)
{
if(!curr)
break;
curr = curr->next;
}
return curr;
}
Node *find_node_by_data(int data)
{
Node *curr = head;
while(curr)
{
if(curr->data == data)
break;
curr = curr->next;
}
return curr;
}
int modify_node(int position, int new_data)
{
Node *node = find_node_by_position(position);
if(!node)
return -1;
node->data = new_data;
return 0;
}
int main()
{
insert_node(1, 1);
insert_node(2, 2);
insert_node(3, 3);
insert_node(4, 4);
printf("delete node at position 2\n");
delete_node(2);
Node *curr = head;
while(curr)
{
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
printf("modify node at position 1 to 5\n");
modify_node(1, 5);
curr = head;
while(curr)
{
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
return 0;
}
```