#include
#include
//#include
using namespace std;
typedef int DataType;
typedef struct node
{
DataType data;
node *next;
}linkNode;
//链表初始化
/**初始化链表头部指针需要用二级指针或者一级指针的引用**/
void linkList_init(linkNode **head)
{
*head = (linkNode *)malloc(sizeof(linkNode));
(*head)->next = NULL;
}
/*
void linkList_init1(linkNode *&head)
{
head = (linkNode *)malloc(sizeof(linkNode));
head = NULL;
}
*/
//取得元素
int linkList_getElem(linkNode *head, int i)
{
linkNode *p;
p = head;
int j = -1;
while(p->next != NULL && j < i)
{
p = p->next;
j++;
}
if(j != i)
{
cout << "func linkList_getElem err" << endl;
return 0;
}
return p->data;
}
//插入数据
int linklist_insert(linkNode *head, int i, DataType elem)
{
linkNode *p, *q;
p = head;
int j = -1;
while(p->next != NULL && j < i-1)
{
p = p->next;
//++j;
j++;
}
//判断
if(j != i-1)
{
cout << "func linklist_insert err" << endl;
return 0;
}
q = (linkNode *)malloc(sizeof(linkNode)); //申请一个节点
q->data = elem;
q->next = p->next;
p->next = q;
return 1;
}
//删除元素
int linkList_delete(linkNode *head, int i)
{
linkNode *p, *q;
p = head;
int j = -1;
while(p->next != NULL && j < i-1)
{
p = p->next;
j++;
}
if(j != i-1)
{
cout << "func linkList_delete err" << endl;
return -1;
}
q = p->next;
//x = p->data;
p->next = p->next->next;
free(q);
return 1;
}
//取得链表中元素个数
int linkList_length(linkNode *head)
{
linkNode *p;
p = head;
int length = 0;
while(p->next != NULL)
{
p = p->next;
length++;
}
return length;
}
//销毁链表
/**销毁链表需要用到二级指针或者一级指针的引用**/
void linkList_destroy(linkNode **head)
{
linkNode *p, *q;
p = *head;
while(p != NULL)
{
q = p;
p = p->next;
free(q);
}
*head = NULL;
}
/*
void linkList_init(linkNode **head)
{
*head = (linkNode *)malloc(sizeof(linkNode));
(*head)->next = NULL;
}
*/
int main()
{
linkNode *mylist; //定义mylist是一个指针
/**而 &mylist 是指向mylist的指针(二级指针),linkList_init()函数中head是二级指针(指针的指针),通过把&mylist传递给函数,
此时二级指针head是指向mylist的指针(head = &mylist),对*head的操作其实就是对mylist的操作
**/
linkList_init(&mylist); // 初始化链表 /***需要对头指针作出修改,所以要定义二级指针(指针的指针)
//mylist = (linkNode *)malloc(sizeof(linkNode));
//插入数据
for(int i=0; i<10; i++)
{
linklist_insert(mylist, i, i+1);
}
//cout << linkList_length(mylist);
//取得所有元素
for(int i=0; iList_length(mylist); i++)
{
int x = linkList_getElem(mylist, i);
cout << x << " ";
}
cout << endl;
linkList_delete(mylist, 3);
for(int i=0; iList_length(mylist); i++)
{
int x = linkList_getElem(mylist, i);
cout << x << " ";
}
cout << endl;
return 0;
}
C++ 链表实现
最新推荐文章于 2024-08-17 11:41:13 发布