实用链表(待续)

来源:互联网 发布:南山区软件产业基地 编辑:程序博客网 时间:2024/06/07 01:08
#include <stdio.h>#include <stdlib.h>typedef struct node{struct node *next;int data;}node,*link,*position;typedef struct linklist{link head, tail;int len;}linklist;void MakeNode(link *p,int e){*p = (link)malloc(sizeof(node));if(!(*p)){exit(-1);}(*p)->data = e;}void FreeNode(link *p){free(*p);p = NULL;}void IniList(linklist *list){link p;p = (link)malloc(sizeof(node));if(p){p->next = NULL;(*list).head = (*list).tail = p;(*list).len = 0;}else{exit(-1);}}void ClearList(linklist *list){link p,q;if((*list).head != (*list).tail){p = q = (*list).head->next;(*list).head->next = NULL;while(p != (*list).tail){q = p->next;free(p);p = q;}free(q);(*list).tail = (*list).head;(*list).len = 0;}}void DestroyList(linklist *list){ClearList(list);FreeNode(&((*list).head));(*list).tail = (*list).head;(*list).len = 0;}void InsFirst(linklist *list, link h, link s){s->next = h->next;h->next = s;if(h == (*list).tail){(*list).tail = s;}(*list).len++;}int DelFirst(linklist *list, link h, link *q){*q = h->next;if(q){h->next = (*q)->next;if(h->next == NULL){(*list).tail = h;}(*list).len--;return 0;}else{return -1;}}void Append(linklist *list, link s){int i = 1;(*list).tail->next = s;while(s->next != NULL){i++;s = s->next;}(*list).tail = s;(*list).len += i;}position PriorPos(linklist list, link p){link q = list.head->next;if(q == p){return NULL;}else{while(q->next != p){q = q->next;}return q;}}int Remove(linklist *list, link *q){link p = (*list).head;if((*list).len == 0){*q = NULL;return -1;}while(p -> next != (*list).tail){p = p->next;}*q = (*list).tail;p->next = NULL;(*list).tail = p;(*list).len--;return 0;}void InsBefore(linklist *list, link *p, link s){link q;q = PriorPos(*list, *p);if(q == NULL){q = (*list).head;}s->next = *p;q->next = s;*p = s;(*list).len++;}void InsAfter(linklist *list, link *p, link s){s->next = (*p)->next;(*p)->next = s;*p = s;(*list).len++;if(*p = (*list).tail){(*list).tail = s;}}void SetCurElem(link p, int e){p->data = e;}int GetCurElem(link p){return p->data;}int main(){return 0;}