链表的实现
2015-09-16 00:51
459 查看
#include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char ElemType; typedef struct LNode{ ElemType data; struct LNode* next; }LNode,*LinkList; void CreateList_L(LinkList*L,int n) { int i; LNode*p; *L = (LinkList)malloc(sizeof(LNode)); (*L)->next = NULL; for(i=n;i>0;--i) { p = (LinkList)malloc(sizeof(LNode)); scanf("%c",&p->data); p->next = (*L)->next;(*L)->next = p; } p = (*L)->next; }//CreateList L void PrintList_L(LinkList L) { LNode*p = L->next; while(p!=NULL) { printf("%c",p->data); p = p->next; } } //Print all the datas of the LinkList Status InsertList_L(LinkList*L,int pos,ElemType e) { LNode* p = *L,*q; int i = 0; while(p!=NULL && i<pos-1) { p = p->next; i++; } if(p == NULL || pos-1<i)return ERROR; q = (LNode*)malloc(sizeof(LNode)); q->data = e;q->next = p->next; p->next = q; return OK; }//Insert a node at the position pos Status DeleteList_L(LinkList*L,int pos,ElemType*e) { LNode*p = *L,*q; int i = 0; while(p->next!=NULL && i<pos-1) { p = p->next; i++; } if(p->next==NULL || pos-1<i)return ERROR; q = p->next; *e = q->data; p->next = q->next; free(q); return OK; } int main() { LinkList L = NULL; ElemType e; CreateList_L(&L,5); PrintList_L(L); InsertList_L(&L,3,'9'); printf("\n"); PrintList_L(L); printf("\n"); DeleteList_L(&L,2,&e); PrintList_L(L); printf("\nThe data %c has been deleted!\n",e); return OK; }
相关文章推荐
- [C/C++]反转链表
- 动易2006序列号破解算法公布
- C#实现基于链表的内存记事本实例
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构揭秘一
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 数据结构之Treap详解
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法