一、LinkTable.h文件
//LinkTable结构体实现
typedef struct Link{
int elem;
struct Link *next;
}node;
#define initTableSize 5
node * initLinkTable();
int selectElem(node *p, int elem);
node *amendElem(node *p, int add, int newElem);
node *insertElem(node *p, int elem, int add);
node* deltElem(node *p, int add);
void displayTable(node *p);
二、LinkTable.cpp文件
#include "stdafx.h"
#include "LinkTable.h"
#include "stdio.h"
#include "stdlib.h"
//单链表的初始化
node * initLinkTable(){
node *p = (node*)malloc(sizeof(node));//头结点
node *temp = p;//声明一个指针指向头结点,用于遍历链表
for (int i = 0; i < initTableSize; i++)
{
node *Node = (node*)malloc(sizeof(node));
Node->elem = i;
Node->next = NULL;
temp->next = Node;
temp = Node;
}
return p;
}
//查找链表中的节点
int selectElem(node *p, int elem){
node *temp = p;
int i = 1;
while (temp->next){
temp = temp->next;
if (temp->elem == elem){
return i;
}
i++;
}
return -1;
}
// 更改链表中的数据
node *amendElem(node *p, int add, int newElem){
node *temp = p;
int tableCounter = 0;
do
{
tableCounter++;
temp = temp->next;
} while (temp->next);
if (tableCounter <add)
{
printf("更改链表中的数据位置无效\n");
return p;
}
temp = p;
for (int i = 0; i < add; i++){
temp = temp->next;
}
temp->elem = newElem;
return p;
}
//向链表中插入结点
node *insertElem(node *p, int elem, int add){
node *temp = p;
//找到插入结点的前一个位置
for (int i = 0; i < add-1; i++){
if (temp->next == NULL){
printf("插入位置无效\n");
return p;
}
temp = temp->next;
}
node *insertNode = (node*)malloc(sizeof(node));
insertNode->elem = elem;
insertNode->next = temp->next;
temp->next = insertNode;
return p;
}
//从链表里面删除数据
node* deltElem(node *p, int add){
node *temp = p;
for (int i = 0; i < add - 1; i++){
temp = temp->next;
}
node *deltNode = temp->next;
temp->next = deltNode->next;
free(deltNode);
return p;
}
//display链表
void displayTable(node *p){
node *temp = p;
do
{
temp = temp->next;
printf("%d ", temp->elem);
} while (temp->next);
printf("\n");
}
三、测试程序
#include "LinkTable.h"
int _tmain(int argc, _TCHAR* argv[])
{
//初始化链表(1,2,3,4)
printf("初始化链表为:\n");
node *p = initLinkTable();
displayTable(p);
printf("在第4的位置插入元素5:\n");
p = insertElem(p, 5,4);
displayTable(p);
printf("删除元素3:\n");
p = deltElem(p, 3);
displayTable(p);
printf("查找元素3的位置为:\n");
int address = selectElem(p,3);
if (address == -1) {
printf("没有该元素");
}
else{
printf("元素3的位置为:%d\n", address);
}
printf("删除查找的元素:\n");
p = deltElem(p, address);
displayTable(p);
printf("更改第4的位置的数据为7:\n");
p = amendElem(p, 4, 7);
displayTable(p);
return 0;
}