参考了清华的《数据结构C语言版》。
准备用在新的工程中作为底层,主要是使用的C,也使用了C++的一些东西,包括标准库,呵呵,有点不论不类了。
#include <windows.h>//因为是一个windows程序,所以加上此行
#include <iostream>
using namespace std;
//定义需要用到的数据
#define REPLACE_NEW_TEXT_MAX 200
#define REPLACE_OLD_TEXT_MAX 20
//链表节点声明
struct Replace_Text_List
{
char NewText[REPLACE_NEW_TEXT_MAX];
char OldText[REPLACE_OLD_TEXT_MAX];
int index;
struct Replace_Text_List * Next;
};
typedef struct Replace_Text_List Node;
typedef Node * Link;
//清空链表
void free_list(Link Head)
{
//使用临时变量防止修改传入参数的指向
Link pointer;
int i=0;
//当前节点不为空
while(Head!=NULL)
{
i++;
pointer = Head;
//将当前节点指向下一个节点
Head = Head ->Next;
free(pointer);
}
cout<<"free node: "<<i<<endl;
}
//创建链表
//测试只使用一个old字符串
Link create_list(Link Head)
{
int DataNum;
char DataOld[REPLACE_OLD_TEXT_MAX];//临时字符串空间
Link New;//临时结构对象,主要用于保存新的节点地址
Link Pointer;//当前节点临时对象
//分配第一个节点
Head = (Link) malloc (sizeof(Node));
if(Head == NULL)
{
//!!内存分配不足
return 0;
}
else
{
//设置首节点信息
DataNum = 1;
cout<<"Please input the data old"<<endl;
scanf("%s",Head->OldText);
Head->index = DataNum;
//首节点Next指针为空
Head->Next = NULL;
//传递首节点
Pointer = Head;
while(1)
{
DataNum++;
//分配新的节点
New = (Link) malloc (sizeof(Node));
cout<<"Please input the data old"<<endl;
scanf("%s",DataOld);
if(DataOld[0] == '0'||DataOld[0] == NULL)
break;
New->index = DataNum;
strcpy(New->OldText,DataOld);
//当前节点的Next指针指向NULL
New->Next = NULL;
//上一节点的Next指针指向当前节点
Pointer->Next = New;
//保存新节点地址
Pointer = New;
}
}
return Head;
}
//输出链表
void print_list(Link Head)
{
//使用临时变量防止修改传入参数的指向
Link Pointer;
Pointer = Head;
while(Pointer!=NULL)
{
cout<<"Data Number : "<<Pointer->index<<endl;
cout<<"Data Old : "<<Pointer->OldText<<endl;
Pointer = Pointer->Next;
}
}
int main(void)
{
Link Head;
Head = create_list(Head);
if(Head != NULL)
{
print_list(Head);
free_list(Head);
}
return 0;
}
(汤米) |