线性表的顺序表示和基本操作的实现

xiaoxiao2025-07-14  8

#include <stdio.h> #include<process.h> #include<stdlib.h> #include<ctype.h> #include<limits.h> #include <malloc.h> using namespace std; typedef long long ll; #define overlow -2 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 const int list_init_size=10; const int listincrement=2; typedef struct { int *elem; int length; int listsize; } List; int listinit(List &l) //初始化 { l.elem=(int*)malloc(list_init_size*sizeof(int)); if(!l.elem) exit(overlow); l.length=0; l.listsize=list_init_size; return 1; } int listinsert(List &l,int i,int e)//插入 { int *newbase,*q,*p; if(i<1||i>l.length+1) return 0; if(l.length>=l.listsize) { newbase=(int*)realloc(l.elem,(l.listsize+listincrement)*sizeof(int)); if(!newbase) exit(overlow); 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 1; } int listdelete(List &l,int i,int *e)//删除 { int *p,*q; if(i<1||i>l.length) return 0; 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 listreverse(List &l)//逆序 { int t,i; for(int i=0;i<l.length/2;i++) { t=l.elem[i]; l.elem[i]=l.elem[l.length-i-1]; l.elem[l.length-i-1]=t; } return 1; } int listprint(List l)//输出 { int i; for(int i=0;i<l.length;i++) printf("%d ",l.elem[i]); puts(""); return 1; } int main()//test { List l; int i,j,t; if(listinit(l)) for(j=1;j<=5;j++) i=listinsert(l,j,2*j); listprint(l); listinsert(l,2,20); puts("在2处插入20"); listprint(l); puts("删除4的值"); listdelete(l,4,&t); printf("The Deleted value is %d\n",t); listprint(l); puts("进行逆序交换"); listreverse(l); listprint(l); return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-5033054.html

最新回复(0)