数据结构线性表的顺序存储与链式是存储
数据结构线性表顺序存储结构与链式存储结构
源代码 实现线性表的生成,插入,删除元素:
#include
#include
#define NULL 0
#define OK 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int Elemtype;
typedef struct Lnode
{
Elemtype data;
struct Lnode *next;
}LinkList;
LinkList *La,*Lb,*Lc;
Status CreateList_L(LinkList *Lst,int n)
{
LinkList *p;
int i,m;
//建立一个简单的带表头结点的单链表
}
Lst=NULL; Lst=(LinkList*)malloc(sizeof(Lnode)); if(!Lst) return OVERFLOW; Lst->next=NULL; for(i=n;i>=1;--i) { } La=Lst; return OK; p=(LinkList*)malloc(sizeof(Lnode)); if(!p) return OVERFLOW; printf("输入第%d个元素的值:",i); scanf("%d",&m); p->data=m; p->next=Lst->next; Lst->next=p;
Status Createlem_L(LinkList *L,int n)
{ //建立带表头接点的具有n个元素的单连表(其元素按值递增) LinkList *p;
Elemtype m,r; //第一变量使之输入元素递减 L=NULL; L=(LinkList*)malloc(sizeof(LinkList));
if(!L) return OVERFLOW;
L->next=NULL; //先建立一个带表头节点的单链表 int i; for( i=n;i>0;--i) { p=(LinkList*)malloc(sizeof(LinkList)); if(!p) return OVERFLOW; if(i==n) //第一次时不用与前一输入元素比较大小 {
printf("输入地%d个元素:",i);
scanf("%d",&m); p->next=NULL; L->next=p; p->data=m; r=m; } else { printf("输入第%d个元素值:",i); scanf("%d",&m); if(m
p->next=L->next;
L->next=p;
p->data=m; r=m; }
}
} { printf("输入值不合法请重新输入!"); return ERROR; } } Lb=L; return OK;
Status printlist_L(LinkList *Lst,int n)
{ //输出线性表中的元素
LinkList *q; q=Lst->next; int i; printf("输出线性表Lst中的元素:\n"); for(i=1;idata); q=q->next;
}
Status MergeList_L(LinkList *Ld,LinkList *Le,LinkList *Lf)
{
LinkList *pd,*pe,*pf; Lf=NULL;
Lf=(LinkList*)malloc(sizeof(Lnode));
if(!Lf) return OVERFLOW; Lf->next=NULL; pd=Ld->next; pe=Le->next; Lf=pf=Ld; while(pd&&pe) { } pf->next= (pd)? pd:pe; free(Le); Lc=Lf; //将得到的lc赋给全局变量Lc if(pd->datadata) {pf->next=pd;pf=pd;pd=pd->next;} else {pf->next=pe;pf=pe;pe=pe->next;}
// printf("%d",Lc->next->data);
return OK;
void main()
{
LinkList *LA,*LB; //构造按元素按递增排列的线性表LA,LB LA=LB=NULL; LinkList *Lst; Lst=NULL; CreateList_L(Lst,2); //建立一个简单的单链表并输出 printlist_L(La,2);
Createlem_L(LA,4);
MergeList_L(LA,LB,LC);
LA=Lb; Createlem_L(LB,4); LB=Lb; printlist_L(LA,4); printlist_L(LB,4); LinkList *LC; //将LA,LB中的元素按元素非递减的顺序排列与LC中 LC=NULL; LC=Lc;
printlist_L(LC,8);
}
typedef int ElemType;
typedef int Status;
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#include
#include
ElemType e,m;
typedef struct
{
ElemType *elem; int length; int listsize;
}Sqlist;
Status InitList_Sq(Sqlist *L);
Status ListInsert_Sq(Sqlist *L,int i,ElemType e);
Status ListDelete_Sq(Sqlist *L,int i,ElemType e);
Status InitList_Sq(Sqlist *L)
{
}
Status ListInsert_Sq(Sqlist*L,int i,ElemType e)
{
ElemType *q,*p,*newbase; L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L->elem) exit(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; return OK;
if(L->length>=L->listsize)
{
newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
} if(!newbase)exit(OVERFLOW); L->elem=newbase; L->listsize=LISTINCREMENT;
}
q=&(L->elem[i-1]); for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p; *q=e; ++L->length; return OK;
/*Status ListDelete_Sq(Sqlist *L,int i,ElemType *e) {
ElemType *p; int j=0; p=L; while(p->next&&jnext)||j>i-1) return ERROR; q=p->next;p->next=q->next; e=q->data; p=p->next; ++j;
free(q);
}*/
return OK;
Status ListDelete_Sq(Sqlist *L,int i,ElemType m) {
}
void main()
{
ElemType *p,*q; if((iL->length)) return ERROR; p=&(L->elem[i-1]); m=*p; q=L->elem+L->length-1; for(++p;plength; return OK; Sqlist Lst; int i,n=10; if(InitList_Sq(&Lst)==OK) { for(i=1;i
} } printf("%d,e=%d\n",i,Lst.elem[i]); getch(); ListDelete_Sq(&Lst,5,m); for(i=0;i