线性表
2015-09-22 09:48
211 查看
线性表的顺序存储及部分操作:
线性表链式表示:
//有几点还没解决,插入数据的类型,和创建时类型有点区别,输出时数据有点怪异,有空改正
主要问题出自在定义LNode的时候,手误将data(int)定义为了*int
#include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef struct { int *elem; int length; int listsize; }SqList; int InitList_Sq(SqList &L,int n){ L.elem=(int *)malloc(n*sizeof(int)); if(!L.elem)exit(-2); L.length=0; L.listsize=n; return 1; } int Listinsert_Sq(SqList &L,int i,int e){ if(i<1||i>L.length+1)return 0; if(L.length>=L.listsize){ int *newbase; newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase)exit(-2); L.elem=newbase; L.listsize+=LISTINCREMENT; } int *p,*q; q=&(L.elem[i-1]); for (p=&(L.elem[L.length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L.length; return 1; } int ListDelete_Sq(SqList &L,int i,int &e){ if(i<1||(i>L.length+1))return 0; int *p,*q; p=&(L.elem[i-1]); e=*p; q=L.elem+L.length-1; for(++p;p<=q;++p)*(p-1)=*p; --L.length; return 1; } int LocateElem_Sq(SqList L, int e){//find the first location of element e int i=1; int *p=L.elem; while(i<=L.length&&!(*p++==e))++i; if(i<=L.length)return i; else return 0; } void MegeList_Sq(SqList La,SqList Lb,SqList &Lc){ int *pa=La.elem,*pa_last,*pb=Lb.elem,*pb_last,*pc; Lc.listsize=La.length+Lb.length; pc=Lc.elem=(int *)malloc(Lc.listsize*sizeof(int));//haven't delete repeated element if(!Lc.elem)exit(-2); pa_last=La.elem+La.length-1; pb_last=Lb.elem+Lb.length-1; while(pa<=pa_last&&pb<=pb_last){ if(*pa<=*pb)*pc++=*pa++; else *pc++=*pb++; } while(pa<=pa_last)*pc++=*pa++; while(pb<=pb_last)*pc++=*pb++; } void Display(SqList A){ for(int i=0;i<A.length;i++) printf("%d ",*(A.elem+i)); puts(""); } int main(){ SqList TableA; int n;//This array have n elements,and m elements need to insert to the array scanf("%d",&n); InitList_Sq(TableA,n); for(int i=0;i<n;i++){ scanf("%d",TableA.elem+i); TableA.length++; } Display(TableA); int e,loc,tmp=0; scanf("%d%d",&loc,&e); if(!Listinsert_Sq(TableA,loc,e))printf("Error\n"); Display(TableA); printf("%d\n",LocateElem_Sq(TableA,e)); if(!ListDelete_Sq(TableA,loc,tmp))printf("Error\n"); else Display(TableA); return 0; }
线性表链式表示:
//有几点还没解决,插入数据的类型,和创建时类型有点区别,输出时数据有点怪异,有空改正
主要问题出自在定义LNode的时候,手误将data(int)定义为了*int
<p>// MyList.cpp : 定义控制台应用程序的入口点。 //</p><p>#include "stdafx.h"</p><p> #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std;</p><p>#define LIST_INIT_SIZE 100 #define LISTINCREMENT 10</p><p>typedef struct LNode{ int data; struct LNode *next; }*LinkList;</p><p>void CrateList_L(LinkList &L,int n){ L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; LinkList p; for(int i=n;i>0;--i){ p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=L->next;L->next=p; } }</p><p>int GetElem_L(LinkList L,int i,int &e){ LinkList p=L->next; int j=1; while(p&&j<i){ p=p->next;++j; } if(!p||j>i)return 0; e=p->data; return 1; }</p><p>int ListInsert_L(LinkList &L,int i,int &e){//insert one element to i's position LinkList p=L,s; int j=1; while(p&&(j<i)){p=p->next;++j;} if(!p||j>i)return 0; s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; return 1; }</p><p>int ListDelete_L(LinkList &L,int i,int e){ LinkList p=L;int j=0; while(p->next&&j<i-1){ p=p->next;++j; } if(!(p->next)||j>i-1)return 0; LinkList q=p->next;p->next=q->next; e=q->data;free(q); return 1; }</p><p>void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){ LinkList pa=La->next,pb=Lb->next,pc=La; Lc=pc; while(pa&&pb){ if(pa->data<=pb->data){ pc->data=pa->data;pc=pa;pa=pa->next; } else {pc->next=pb;pc=pb;pb=pb->next;} } pc->next=pa?pa:pb; free(Lb); }</p><p>void DisplayT(LinkList A){ A=A->next; while(A!=NULL){ printf("%d ",A->data); A=A->next; } puts(""); } int main(){ LinkList LinkT; int n; scanf("%d",&n); CrateList_L(LinkT,n); DisplayT(LinkT); int loc,e,tmp=0; scanf("%d%d",&loc,&e); ListInsert_L(LinkT,loc,e); DisplayT(LinkT); GetElem_L(LinkT,loc,tmp); printf("%d\n",tmp); tmp=0; ListDelete_L(LinkT,loc,tmp); DisplayT(LinkT); return 0; } </p>
相关文章推荐
- jQuery权限控制
- Centos6.x PPTPD 搭建方法,亲测有效
- HDU 3648 Median Filter
- 【转】C# 流总结
- 解决更新Xcode以后使用Git报错的问题
- js 让小数四舍五入保留两位小数的函数是?
- 玩node-images模块---Node.js轻量级跨平台图像编解码库
- Android开发总结笔记 TableLayout(表格布局) 1-1-4
- less的使用
- SetTimer时间函数
- iOS9 适配
- SRM 668 DIV 2 VerySecureEncryption 250point
- mongodb执行js脚本
- Cordova插件
- OA 权限树 核心 Js代码 Ajax Struts Jquery
- ZOj 1234
- CodeForces 579C A Problem about Polyline[数学]
- Java中关系操作符"=="和equals()方法的用法
- iOS 网络编程基础
- HDU 3743 Frosh Week(树状数组求逆序数)