动态线性表的建立,查找插入删除遍历程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
//线性表的动态分配顺序存储结构(借助指针)
#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量#define LISTINCREMENT 2 //线性表存储空间的分配增量
typedef struct{
int *elem; //指示动态分配数组的指针
int length; //当前长度
int listsize; //当前存储容量
}SqList; //用结构体定义顺序表
//建立一个顺序表
SqList InitList_Sq(SqList &L)
{
int x;
L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));//初始的动态分配
L.length=0; //初始化当前长度为0
L.listsize=LIST_INIT_SIZE;//初始化当前存储容量为初始分配量
printf("请输入顺序表中的元素:\n");
scanf("%d",&x);
while(x)
{
L.elem[L.length ++]=x;
scanf("%d",&x);
}
return L;
}
//遍历顺序表
void Traverse_Sq(SqList L)
{
printf("\n\n");
for(int i=0;i printf("%5d",L.elem [i]); printf("\n\n"); } // 给出元素值,查找位置 void GetElem_1(SqList L,int e){ for(int i=0;i if(L.elem[i]==e) { printf("元素%d在表的第%d个位置上\n\n",e,i+1); return; } printf("顺序表中没有%d这个元素\n\n",e); } //给出位置,查找元素值 int GetElem_2(SqList L,int i) { if(i>L.length-1) {printf("您的输入超出了数组的范围"); exit(0); } return L.elem[i]; } //在给出位置上插入给出值 void ListInsert_Sq(SqList &L,int i,int e) { int *newbase; int *q,*p; if(i<1||i>L.length+1) {printf("您输入的值不合法,退出"); exit(0);} if(L.length>=L.listsize) { newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(0); L.elem=newbase; L.listsize+=LISTINCREMENT; } q=&(L.elem[i-1]);//q为插入位置 p=&(L.elem[L.length-1]); //p为原数组的最后一个位置 for(;p>=q;--p) *(p+1)=*p; //从插入位置到最后一个位置上的所有元素都后移一位*q=e; //插入e ++L.length; } //删除数组中的指定值 void ListDelete_Sq(SqList &L,int elem) { int i,j; i=0; for(j=0;j if(L.elem[j]!=elem) L.elem[i++]=L.elem[j]; L.length=i; } //删除指定位置上的元素 int ListDelete_Sq1(SqList &L,int i) { int *p,*q; p=&(L.elem[i]); //q为删除元素的位置 /*q=&(L.elem[L.length-1]);//p为原数组的最后一个位置 for(++p;q<=p;++p) *(p-1)=*p; --L.length;*/ return *p; } //线性表的单链表存储结构 typedef struct Node { int elem; struct Node *next; }LNOde,*LinkList; //采用尾差法建立一个单链表 void CreateList_L(LinkList &LL){ int x; LinkList p,pre; //LNode *p,*pre; LL=(Node *)malloc(sizeof(LNOde)); pre=LL; printf("请输入单链表中的元素:\n"); scanf("%d",&x); while(x) { p=(LinkList)malloc(sizeof(Node)); p->elem=x; pre->next=p; pre=p; scanf("%d",&x); } pre->next=NULL; // return(LL); } //遍历线性链表 void TraverseList_L(LinkList LL) { LNOde *p; printf("\n\n"); p=LL->next; if(p!=NULL) do { printf("%5d",p->elem); p=p->next; }while(p!=NULL); else printf("单链表中无元素。\n"); } void GetELem_L(LinkList LL,int elem) {//查找元素在单链表中的位置 int i; LNOde *p; p=LL->next;