标签:单链表
线性表的链式存储结构——链表,包括单链表、双链表、循环链表等。单链表的结点由数据元素和指向下一个结点的指针构成,是最简单的一种链表结构。
对单链表的操作很多,如查找、插入、删除、逆置、打印等,现对这些操作的实现做一个小结,代码用C语言实现。
#include<stdio.h> #include<stdlib.h> typedef struct LNode { char data; struct LNode *next; }LinkList; extern LinkList *CreatListF();//头插法 extern LinkList *CreatListE();//尾插法 extern int LocateList(LinkList *head, char e);//查找结点 extern LinkList *InsertList(LinkList *head, int i, char e);//插入结点 extern LinkList *DeleteList(LinkList *head, int i, char e);//删除结点 extern int LengthList(LinkList *head);//计算链表的长度 extern void PrintList(LinkList *head);//打印链表 extern LinkList *ReverseList(LinkList *head);//逆置链表 LinkList *CreatListF() { LinkList *head,*p; char str[10]; int i; head=(LinkList *)malloc(sizeof(LinkList)); head->next=NULL; printf("please input a string:"); gets(str); for(i=0;str[i]!='\0';i++) { p=(LinkList *)malloc(sizeof(LinkList)); p->data=str[i]; p->next=head->next; head->next=p; } return head; } LinkList *CreatListE() { LinkList *head,*p,*q; char str[10]; int i; head=(LinkList *)malloc(sizeof(LinkList)); head->next=NULL; q=head; printf("please input a string:"); gets(str); for(i=0;str[i]!='\0';i++) { p=(LinkList *)malloc(sizeof(LinkList)); p->data=str[i]; q->next=p; q=p; } q->next=NULL; return head; } int LocateList(LinkList *head, char e) { LinkList *p=head->next; int i=1; while(p!=NULL && p->data != e) { p=p->next; i++; } if(NULL==p) { printf("NO Found Node\n"); return 0; } else return i; } LinkList *InsertList(LinkList *head, int i, char e) { LinkList *p,*q; int j=0; p=head; while(j<i-1 && p!=NULL) { j++; p=p->next; } if(NULL==p) { printf("No Found Node %d!\n",i); exit(0); } q=(LinkList *)malloc(sizeof(LinkList)); q->data=e; q->next=p->next; p->next=q; return head; } LinkList *DeleteList(LinkList *head, int i, char e) { LinkList *p,*q; int j=0; p=head; while(j<i-1 && p!=NULL) { j++; p=p->next; } if(NULL==p) { printf("No Found Node %d!\n",i); exit(0); } else { q=p->next; if(NULL==q) { printf("NO Found"); exit(0); } e=q->data; p->next=q->next; free(q); return head; } } int LengthList(LinkList *head) { LinkList *p; int n=0; p=head->next; while(p!=NULL) { ++n; p=p->next; } return n; } void PrintList(LinkList *head) { LinkList *p; p=head->next; while(p) { printf("%c",p->data); p=p->next; } printf("\n"); } LinkList *ReverseList(LinkList *head) { LinkList *p,*q; if(head->next && head->next->next)//链表不为空或单结点 { p=head->next; q=p->next; p>next-=NULL;//将结点变成终端结点 while(q!=NULL) { p=q; q=q->next; p->next=head->next; head->next=p; } return head; } return head;//如果是空表或单结点表,直接返回head }
标签:单链表
原文地址:http://blog.csdn.net/suaoyang/article/details/38069473