单链表数据结构为:
typedef struct Lnode { ElemType data; //该节点数据,头结点不存数据 struct Lnode *next; //指向下一节点指针 }LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n); //头插法建表 void CreateListR(LinkList *&L,ElemType a[],int n); //尾插法建表 void InitList(LinkList *&L); //初始化单链表 void DestroyList(LinkList *&L); //销毁单链表 int ListEmpty(LinkList *L); //判断链表是否为空 int ListLength(LinkList *L); //求单链表长度 void DispList(LinkList *L); //输出单链表 int GetElem(LinkList *L,int i,ElemType &e); //求单链表里第i个节点的值,并赋值给e int LocateElem(LinkList *L,ElemType e); //求与e值相等的第一个元素的序号 int InsertElem(LinkList *&L,int i,ElemType e); //插入元素 int DeleteElem(LinkList *&L,int i,ElemType &e); //删除元素
#include <stdio.h> #include <iostream> #include <stdlib.h> #define ElemType char #define GET_ARRAY_LEN(array) (sizeof(array)/sizeof(array[0])) using namespace std; typedef struct Lnode { ElemType data; //该节点数据,头结点不存数据 struct Lnode *next; //指向下一节点指针 }LinkList; void CreateListF(LinkList *&L,ElemType a[],int n); //头插法建表 void CreateListR(LinkList *&L,ElemType a[],int n); //尾插法建表 void InitList(LinkList *&L); //初始化单链表 void DestroyList(LinkList *&L); //销毁单链表 int ListEmpty(LinkList *L); //判断链表是否为空 int ListLength(LinkList *L); //求单链表长度 void DispList(LinkList *L); //输出单链表 int GetElem(LinkList *L,int i,ElemType &e); //求单链表里第i个节点的值,并赋值给e int LocateElem(LinkList *L,ElemType e); //求与e值相等的第一个元素的序号 int InsertElem(LinkList *&L,int i,ElemType e); //插入元素 int DeleteElem(LinkList *&L,int i,ElemType &e); //删除元素 void CreateListF(LinkList *&L,ElemType a[],int n){ LinkList *s=NULL; L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; for(int i=0;i<n;i++){ s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; s->next=L->next; L->next=s; } } void CreateListR(LinkList *&L,ElemType a[],int n){ LinkList *s=NULL; L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; LinkList *p=L; for(int i=0;i<n;i++){ LinkList *s=(LinkList *)malloc(sizeof(LinkList)); s->data=a[i]; s->next=NULL; p->next=s; p=p->next; } } void InitList(LinkList *&L){ L=(LinkList *)malloc(sizeof(LinkList)); L->next=NULL; } void DestroyList(LinkList *&L){ LinkList* p=L; LinkList* pnext=p->next; while(pnext!=NULL){ free(p); p=pnext; pnext=pnext->next; } free(p); } int ListEmpty(LinkList *L){ return(L->next==NULL); } int ListLength(LinkList *L){ LinkList* p=L; int count=0; while(p->next!=NULL){ count++; p=p->next; } return count; } void DispList(LinkList *L){ LinkList *p=L->next; while(p!=NULL){ cout<<p->data<<" "; p=p->next; } cout<<endl; } int GetElem(LinkList *L,int i,ElemType &e){ int j=0; LinkList *p=L; while(j<i&&p!=NULL){ p=p->next; j++; } if(p==NULL||i<1)return -1; else { e=p->data; return 1; } } int LocateElem(LinkList *L,ElemType e){ int i=1; LinkList *p=L->next; while(p!=NULL&&p->data!=e){ p=p->next; i++; } if(p==NULL)return -1; else return i; } int InsertElem(LinkList *&L,int i,ElemType e){ LinkList *p=L; if(i<1||i>(ListLength(L)+1))return -1; else { for(int j=1;j<i;j++){ p=p->next; } LinkList* addNumber=(LinkList *)malloc(sizeof(LinkList)); addNumber->data=e; addNumber->next=p->next; p->next=addNumber; return 1; } } int DeleteElem(LinkList *&L,int i,ElemType &e){ LinkList *p=L; int j=1; while(j<i&&p!=NULL){ p=p->next; j++; } if(i<1||p==NULL)return -1; else{ LinkList *q=p->next; if(q==NULL)return -1; p->next=q->next; e=q->data; free(q); return 1; } } int main(){ char a[]={'a','b','h','c','r','z','g','y'}; LinkList *L=NULL; ElemType e; CreateListF(L,a,GET_ARRAY_LEN(a)); DispList(L); DestroyList(L); CreateListR(L,a,GET_ARRAY_LEN(a)); DispList(L); GetElem(L,4,e); cout<<e<<endl; cout<<LocateElem(L,e)<<endl; DeleteElem(L,7,e); DispList(L); InsertElem(L,1,'u'); DispList(L); cout<<ListLength(L); return 0; }
原文地址:http://blog.csdn.net/whu_sky/article/details/40949089