单链表

来源:互联网 发布:网络打印被挂起 编辑:程序博客网 时间:2024/06/05 09:01

单链表的定义:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的                            数据是以结点来表示的,每个结点的构成:数据域(数据元素的映象) + 结点指针(指示后继元素存储 位                          置),数据就是存储数据的存储单元,指针就是后继结点的地址数据。

单链表代码操作如下:

//定义一个结点
typedef struct Node{    int data;               struct Node*next;   }Node,*List;
//单链表的初始化void InitList(List plist){assert(plist != NULL);if(plist==NULL){return ;}plist->next = NULL;}//头插bool Insert_head(List plist,int val){Node *p = (Node *)malloc(sizeof(Node));p->data = val;p->next = plist->next;plist->next = p;
return true;}//尾插bool Insert_tail(List plist,int val){Node *q;for(q=plist;q->next!=NULL;q=q->next);Node *p = (Node *)malloc(sizeof(Node));p->data = val;p->next = q->next;q->next = p;
return true;}//查找结点的位置Node* Search(List plist,int key){for(Node *p=plist->next;p!=NULL;p=p->next){if(p->data == key){return p;}}return NULL;}
//下一结点的位置static Node *SearchPri(List plist,int key){for(Node *p=plist;p->next!=NULL;p=p->next){if(p->next->data == key){return p;}}return NULL;}
//删除结点bool Delete(List plist,int key){Node *p = SearchPri(plist,key);if(p == NULL){return false;}Node *q = p->next;p->next = q->next;free(q);return true;}
//单链表的长度int GetLength(List plist){int count = 0;for(Node *p=plist->next;p!=NULL;p=p->next){count++;}return count;}
//判断单链表是否为空bool IsEmpty(List plist){return plist->next == NULL;}//清空数据void Clear(List plist){Destroy(plist);}//销毁单链表void Destroy(List plist){Node *p;while(plist->next != NULL){p = plist->next;plist->next = p->next;free(p);}}
//打印函数void Show(List plist){for(Node *p=plist->next;p!=NULL;p=p->next){printf("%d ",p->data);}printf("\n");}//单链表的逆置void Reverse(List plist)    //重点{if(plist==NULL || plist->next==NULL ||    plist->next->next==NULL){return ;}Node *p = plist->next;Node *q;plist->next = NULL;while(p != NULL){q = p->next;p->next = plist->next;plist->next = p;p = q;}/* 单链表逆置的第二种方法Node *p = plist->next;Node *q = p->next;Node *s;p->next = NULL;while(q != NULL){s = q->next;q->next = p;p = q;q = s;}plist->next = p;*/}

原创粉丝点击