线性表的顺序和链式存储表示及基本操作的实验
来源:互联网 发布:方便面行业数据分析 编辑:程序博客网 时间:2024/05/16 18:48
顺序存储:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define OK 1;
#define ERROR -1;
typedef int ElemType;
typedef struct
{ ElemType *elem;
int length;
int listsize;
}sqlist;
int initlist_sq(sqlist *l)
{ int i,s ;
(*l).elem=(ElemType *)malloc( LIST_INIT_SIZE*sizeof( ElemType));
if (!((*l).elem))
return ERROR;
(*l).length=0;
(*l).listsize=LIST_INIT_SIZE;
puts("/nput into 10 integer:");
for(i=0;i<10;i++)
{ scanf("/n%d",&s);
(*l).elem[i]=s;
}
(*l).length=10;
return OK;
}
int locateElem(sqlist l , ElemType e )
{ ElemType *p=l.elem;
int j=1;
while(j<=l.length&&((*p++)!=e))
{ ++j; }
if(j<=l.length)
{
printf ("/nis found,the locate is %d",j);
}
else
{printf("/n not found");}
}
int listinsert_sq(sqlist *l ,int i , ElemType e )
{ int j;
ElemType *newbase ,*q,*p;
if (i<1||i>(*l).length+1)
return ERROR;
if ((*l).length>=(*l).listsize)
{ newbase=(ElemType*)realloc((*l).elem,((*l).listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return ERROR;
(*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;
puts("/nthe new insert_squence is :/n");
for(i=0;i<(*l).length; i++)
{ printf("%d",(*l).elem[i]);
}
return OK;
}
int listdelete_sq(sqlist *l, int i )
{ ElemType *q, *p;
int j ;
if (i<1||i>(*l).length)
return ERROR;
p=&((*l).elem[i-1]);
q=(*l).elem+(*l).length-1;
for(++p;p<=q;++p)
{ *(p-1)=*p;
}
--(*l).length;
puts("the new delete_squence is :");
for(j=0;j<(*l).length;j++)
{printf("%d",(*l).elem[j]);}
return OK;
}
main()
{ sqlist list;
ElemType x ,k ,m;
int j;
clrscr();
initlist_sq(&list);
printf("/ndo locate: input one integer/n");
scanf("%d", &k);
locateElem(list , k );
printf("/n do insert :input two integer/n");
scanf("%d%d" , &j,&m);
listinsert_sq(&list,j,m);
printf("/ndo delete: input one integer again/n");
scanf("%d",&x);
listdelete_sq(&list,x);
puts("/nthe program is end");
}
链式存储:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define OK 1;
#define ERROR -1;
typedef int ElemType;
typedef struct LNode
{ ElemType data;
struct LNode *next;
}LNode ,*LinkList;
void creatlist_L(LinkList *L,int n)
{ LNode *q,*p;
int i;
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;
}
q=L->next;
while(q->next!=NULL)
{ printf("%5d",q->data);
q=q->next;
}
}
int getElem_L(LinkList L ,int i,ElemType *e )
{ struct LNode *q,*p;
int j=1;
q=L->next;j++;
while(q&&j<i)
{ q=q->next;
++j; }
if(q->next==NULL||j>i) {puts("Error");printf("/n not found");}
else
{ e=q->data;
printf ("/nis found,the locate is %5d %5d",j,e);}
return OK;
}
int List insert_L(LinkList *L ,int i ,ElemType e)
{ struct *q,*p;
q=L;j=0;
while(q&&j<i-i)
{q=q->next;++j;}
if(!q||j>i-1){puts("illegal sites");}
else
{ s=(LinkList)malloc(sizeof(LNode));
s->data=e;s->next=q->next;
q->next=s;
}
puts("/nthe new LinkList is :/n")
q=L->next;
while(q->next!=null)
{ printf("%5d",q->data);
q=q->next;
}
return OK;
}
int listdelete_L(LinkList *L, int i,ElemType &e )
{ ElemType *q, *p;
int j =0;
q=L;
while(q->next&&j<=i-1)
{q=q>next;
++j;}
if(!q->next&&j>i-1)
{puts("illegal sites");}
else
{p=q->next;q->next=p->next;
e=q->data; free(p);
}
put("/nthe delete nunber is %5d:",e)
puts("/nthe new LinkList is :/n")
q=L->next;
while(q->next!=null)
{ printf("%5d",q->data);
q=q->next;
}
return ok;
}
main()
{ LinkList *list;
ElemType m;
int j,n;
clrscr();
puts("/nthe number list_LNode %5d ,please ");
scanf("%5d,&n");
creatlist_L(*list , n);
printf("/ndo locate: input one integer/n");
scanf("%5d", &j);
getElem_L( list , int j ,&m);
printf("/n do insert :input two integer,one is locate,one is LNode:/n");
scanf("%d%d" , &j,&n);
List insert_L(*list,int j,n );
printf("/ndo delete: input one integer again, locate site is :");
scanf("%5d",&j);
listdelete_L(*list, int j, &m );
puts("/nthe program is end");
}
- 线性表的顺序和链式存储表示及基本操作的实验
- 【线性表】顺序存储、链式存储的实现及操作
- 线性表的顺序表示和基本操作的实现
- 编程实现顺序存储结构和链式存储结构线性表的建立、查找、插入、删除等基本操作
- 线性表的顺序存储和链式存储
- 线性表的顺序存储和链式存储
- 线性表的顺序存储和链式存储差异
- 线性表的顺序存储实现和链式存储实现
- 线性表的顺序表示和操作
- 数据结构笔记(二)线性表的链式表示和基本操作
- 线性表顺序存储的基本操作
- 线性表的链式存储(单链表)的基本操作
- 线性表的链式存储与基本操作
- 线性表的链式表示及实现
- 线性表的顺序和链式存储结构
- 顺序表示的线性表的基本操作
- 二叉树的表示链式表示和顺序存储3.0
- 线性表----队列(顺序表示)的基本操作
- 位图的结构和显示
- SQLserver2000〔Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server不存在或访问被拒绝
- 对vim配置文件的编辑
- C#实现数据库事务处理示例代码
- Javascript 动态添加标签
- 线性表的顺序和链式存储表示及基本操作的实验
- Avkon视图切换架构之调试小结
- 原创:以前的工作总结,低压电动机保护设计[一]
- How to Be Popular
- 启动和运营开源项目的二十个黄金法则
- 第4章 系统初始化
- 你是我的四月天[转自天涯]
- 抵抗不住压力和诱惑,决定试用一下VIM
- 关于c#.Net操作Access数据库的类,支持事务处理