单链表

来源:互联网 发布:大数据挖掘系统 编辑:程序博客网 时间:2024/06/16 21:57
/**链表上的基本操作*/#include <iostream>using namespace std;#define MAX_LIST_SIZE100typedef int DataType;typedef struct node{DataType data;struct node* next;}ListNode;typedef ListNode* LinkList;//链表的基本运算void InitList(LinkList& head);//初始化链表bool GetNode(LinkList& head, int i, ListNode** ppNode);//得到指定位置的元素,并存入ppNode中bool InsertNode(LinkList& head, DataType x, int i);//将结点x插入L链表的第i个结点位置上bool DeleteNode(LinkList& head, int i);//从L链表中删除第i个结点void ClearList(LinkList& head);//清空表bool IsEmpty(LinkList& head);//判断表是否为空int GetListLength(LinkList& head);//获得L链表的长度void PrintList(LinkList& head);//打印表中元素int main(){cout<<"LinkList test"<<endl;LinkList head = NULL;InitList(head);for (int i = 1;i <= 10; i++){if (false == InsertNode(head, i, i))cout<<"InsertNode failed"<<endl;}PrintList(head);cout<<"after delete pos=5:"<<endl;DeleteNode(head, 5);PrintList(head);cout<<"after clear:"<<endl;  ClearList(head);return 0;}void InitList(LinkList& head){head = (ListNode*)malloc(sizeof(ListNode));head->data = 0;head->next = NULL;}bool GetNode(LinkList& head, int i, ListNode** ppNode){int j = 0;ListNode* p = head;while (p->next != NULL && j < i){p = p->next;j++;}if (j == i){*ppNode = p;return true;}return false;}bool InsertNode(LinkList& head, DataType x, int i){ListNode* pPrevNode = NULL;if (!GetNode(head, i-1, &pPrevNode))return false;ListNode* pNode = (ListNode*)malloc(sizeof(ListNode));pNode->data = x;pNode->next = pPrevNode->next;pPrevNode->next = pNode;return true;}bool DeleteNode(LinkList& head, int i){ListNode* pPrevNode = NULL;if (!GetNode(head, i-1, &pPrevNode))return false;ListNode* p = pPrevNode->next;pPrevNode->next = p->next;free (p);return true;}void ClearList(LinkList& head){ListNode* p = head;while (p != NULL){ListNode* temp = p;p = p->next;free(temp);}head = NULL;}bool IsEmpty(LinkList& head){return (head == NULL || head->next == NULL);}int GetListLength(LinkList& head){int len = 0;ListNode* p = head;while (p != NULL){p = p->next;len++;}return len;}void PrintList(LinkList& head){ListNode* p = head->next;while (p != NULL){cout<<p->data<<" ";p = p->next;}cout<<endl;}

原创粉丝点击