单链表的定义及基本操作
2015-11-07 15:18
423 查看
建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、输出
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode *next; }LNode,*LinkList; //头插法建立单链表 void CreateList_L(LinkList &L,int n) {//逆位序输入n个元素的值,建立带表头结点的单链线性表L int i; LinkList p; L=(LinkList)malloc(sizeof(LNode));//建立头结点 L->next=NULL; for(i=n;i>0;--i) { p=(LinkList)malloc(sizeof(LNode));//建立新的结点 scanf("%5d",&p->data); p->next=L->next;//插入到表头 L->next=p; } } Status ListInsert_L(LinkList &L,int i,ElemType e) {//在带头结点的单链线性表L中第i个位置之前插入元素e LinkList p,s; int j; p=L; j=0; while(p&&j<i-1) { p=p->next;++j; }//寻找第i-1个结点 if(!p||j>i-1)//i小于1或者大于表长加1 return ERROR; s=(LinkList)malloc(sizeof(LNode));//生成新结点 s->data=e; s->next=p->next;//插入L中 p->next=s; return OK; } Status ListDelete_L(LinkList &L,int i,ElemType &e) {//在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 LinkList p,q; int j; p=L; j=0; while(p->next&&j<i-1) {//寻找第i个结点,并令p指向其前驱 p=p->next;++j; } if(!(p->next)||j>i-1) return ERROR;//删除位置不合理 q=p->next;p->next=q->next; e=q->data;free(q);//删除并释放结点 return OK; } void ListShow_L(LinkList &L) {//输出链表的元素 LinkList p; p=L->next; while(p) { printf("%5d",p->data); p=p->next; } printf("\n"); } int main() { int n,i; LinkList L; ElemType e,a; printf("创建链表的表长为:"); scanf("%d",&n); printf("\n"); printf("输入表中元素为:"); CreateList_L(L,n); ListShow_L(L); printf("\n输入要插入的元素位置和值:"); scanf("%d %d",&i,&e); if(ListInsert_L(L,i,e)) { ListShow_L(L); } else printf("输入不合法,失败\n"); printf("\n输入要删除的元素位置:"); scanf("%d",&i); if(ListDelete_L(L,i,a)) { printf("删除元素的值为:%d\n",a); ListShow_L(L); } else printf("输入不合法,失败\n"); return 0; }
相关文章推荐
- angular之directive模板视图替换
- DNAT 与 SNAT
- 怎样使用Android studio将极光推送集成
- iOS崩溃日志分析
- poj1852--蚂蚁
- 在字符串中找出第一个只出现一次的字符
- UML之实现图(部署图和构件图)
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项
- 1.6以上jdk与springframework3.x不兼容的问题
- AndroidStudio项目加入融云IMKit运行报错
- SendMessage(利用反射)发送消息
- 天啊
- 三大框架整合步骤(详细)
- 并发编程之Operation Queue
- 写自己的内核模块——获取一个进程的物理地址
- UIWebView网页视图
- 用JavaScript判断横屏竖屏问题。JavaScript代码如下【转】
- Test-02
- android中LayoutParams的简单理解
- 一个十进制的正整数在二进制表示中的数字个数(C实现)