单链表
#include<stdio.h> #include<stdlib.h> //定义单链表 typedef struct LNode{ //定义一个单链表 int data; //数据域 struct LNode *next; //指向下一个元素的指针 }LNode,*LinkList; //初始化单链表 bool InitList(LinkList &L){ L=(LNode *)malloc(sizeof(LNode)); //分配头节点 if(L==NULL){ //内存不足 return false; } L->next=NULL; return true; } //利用头插法建立一个单链表 LinkList List_HeadInsert(LinkList &L){ LNode *s; //指向新结点的指针 int x; //新结点的数据域 L=(LinkList)malloc(sizeof(LNode)); //创建头结点 L->next=NULL; //初始为空链表 scanf("%d",&x); while(x!=9999){ //输入9999结束创建 s=(LNode *)malloc(sizeof(LNode)); //创建新结点 s->data=x; s->next=L->next; L->next=s; scanf("%d",&x); } return L; } //利用尾插法建立一个单链表 LinkList List_TailInsert(LinkList &L){ int x; //新结点的数据域 L=(LinkList)malloc(sizeof(LNode)); //创建头结点 LNode *s;*r=L; //r为尾表指针 scanf("%d",&x); while(x!=9999){ //输入9999结束创建 /*在r结点之后插入元素*/ s=(LNode *)malloc(sizeof(LNode)); //创建新结点 s->data=x; r->next=s; r=s; //r指向新的表尾结点 scanf("%d",&x); } return L; } //按序号查找结点值 LNode *GetElem(LinkList L,int i){ int j=1; LNode *p=L->next; //把第一个结点的指针赋予p指针 if(i==0){ return L; } if(i<1){ return NULL; } while(p&&j<i){ p=p->next; j++; } return p; } //按值查找表结点 LNode *LocateElem(LinkList L,int e){ LNode *p=L->next; while(p!=NULL&&p->data!=e){ p=p->next; } return p; } int main(){ LinkList L; InitList(L); List_HeadInsert(L); return 0; }