顺序表
#include<stdio.h>
#include<stdlib.h>
#define elemtype int
#define list_size 100
#define listcrecent 10
typedef struct
{
elemtype *base;
int length;
int listsize;
}list;
//初始化
int inist (list *L)
{
L->base=(elemtype *)malloc(list_size*sizeof(elemtype));
if(!L->base)
{
printf("分配内存失败");
return 0;
}
else
{
L->length=0;
L->listsize=list_size;
}
}
//插入
int charu (list *L,elemtype e)
{
if(L->length>=L->listsize)
{
L->base=(elemtype *)realloc(L->base,(L->listsize+list_size)*sizeof(elemtype));
if(!L->base)
{
printf("二次分配内存失败");
return 0;
}
}
L->base[L->length]=e;
L->length++;
}
//打印
int dayin (list *L)
{
int i;
for(i=0;i<L->length-1;i++)
{
printf("%5d",L->base[i]);
if(i%5==4)
printf("\n");
}
}
// 删除
int shanchu(list *L,int i,elemtype *e)
{
int j;
if(i<1||i>L->length)
{
printf("删除的位置不合法");
return 0;
}
// e=&L->base[i-1];//为什么这样写是不行的。。。。。。。。。。。。
*e=L->base[i-1];
for(j=i-1;j<L->length-1;j++)
{
L->base[j]=L->base[j+1];
}
L->length--;
return 1;
}
void main ()
{
elemtype e,e1;
int i;
list L;
inist (&L);
printf("请输入要放入顺序表中的值以0结束\n");
for(;;)
{
scanf("%d",&e);
charu (&L,e);
if(L.base[L.length-1]==0) break;
}
printf("插入完毕\n");
printf("打印为\n");
dayin(&L);
printf("\n输入删除的位置");
scanf("%d",&i);
shanchu(&L,i,&e1);
printf("删除的元素为%d",e1);
printf("现在顺序表为\n");
dayin(&L);
}
链表
#include<stdio.h>
#include<stdlib.h>
typedef struct LIST
{
int elem;
LIST *next;
}NOTE,*List;
List head;
void creat (List &L,int n)//创建是选择节点数
{
List p;
int i;
L=(List)malloc(sizeof(NOTE));
if(!L) exit(0);
L->next=NULL;
head=L;
/*for(i=0;i<n;i++)//逆序
{
p=(List)malloc(sizeof(NOTE));
if(!L) exit(0);
scanf("%d",&p->elem);
p->next=L->next;
L->next=p;
printf("插入%d个\n",i+1);
} */
for(i=0;i<n;i++)//正序
{
p=(List)malloc(sizeof(NOTE));
if(!L) exit(0);
scanf("%d",&p->elem);
p->next=L->next;
L->next=p;
L=p;
printf("插入%d个\n",i+1);
}
}
void display(List L)//添加head节点的原因是正序输出因为把头结点移到了最后面 所以有用head记住头结点
{
List p;
p=head->next;
while(p)
{
printf("%d ",p->elem);
p=p->next;
}
}
void insert (List &L,int i,int e)
{
int flag;
List p,q;
p=head;
for(flag=1;flag<i;flag++)//第i个节点的前一个节点
{
p=p->next;
}
q=(List)malloc(sizeof(NOTE));
q->elem=e;
q->next=p->next;
p->next=q;
printf("插入成功");
}
void main()
{
List L;
int n;
printf("输入创建的节点数");
scanf("%d",&n);
creat (L,n);
display(L);
insert(L,3,222);
display(L);
}