线性表的链式存储及相关操作 C语言版

来源:互联网 发布:白无常电商美工教学 编辑:程序博客网 时间:2024/04/30 19:39
/*线性表的链式存储实现及相关操作  C语言版本作者:Shmily日期:2011年8月30日编译环境 VC++6.0带头结点的单链表,结点的下标从1开始*//**************************************************/#include <stdio.h>#include <stdlib.h>#include <malloc.h>/**************************************************/#defineOK1#define ERROR0#define TRUE1#defineFALSE0typedefintStatus;typedef intElemType;/**************************************************/typedef struct node{ElemTypedata;//数据域struct node *next;//指针域}Node, *pNode;/**************************************************///创建一个带头结点的空的单链表pNode CreateListHead(void){pNode L = (pNode)malloc(sizeof(Node));if (!L)exit (-1);L->next = NULL;return L;}/**************************************************///输出单链表void DisLinkList(pNode L){pNode p = L->next;while (p){printf("%d ", p->data);p = p->next;}}/**************************************************///求单链表的长度int ListLength(pNode L){pNode p = L->next;int k=0;while (p){p = p->next;++k;}return k;}/**************************************************///取得链表中第pos个结点的值并存入e中Status GetElem(pNode L, int pos, ElemType *e){pNode p=L->next;int i=1;while (p && i<pos){p = p->next;++i;}if (!p || i>pos)return ERROR;*e = p->data;return OK;}/**************************************************///在链表中的第pos个位置插入一个值为e的结点Status ListInsert(pNode L, int pos, ElemType e){pNode p = L;pNode pNew;int i=1;while (p && i<pos){p = p->next;++i;}if (!p || i>pos)return ERROR;pNew = (pNode)malloc(sizeof(Node));pNew->data = e;pNew->next = p->next;p->next = pNew;return OK;}/**************************************************///删除链表L中的第pos个结点并将该结点的值存入e中Status ListDelete(pNode L, int pos, ElemType *e){pNode p = L;pNode q;int i=1;while (p->next && i<pos){p = p->next;++i;}if (!(p->next) || i>pos)return ERROR;q = p->next;p->next = q->next;*e = q->data;free(q);return OK;}/**************************************************/int main(void){pNode L;ElemType e;int pos=7;L = CreateListHead(L);return 0;}/**************************************************/


 

原创粉丝点击