View Code
实验一 线性表的顺序表示与实现 实验目的 掌握线性表的顺序存储结构; 验证顺序表及其基本操作的实现; 掌握数据结构及算法的程序实现的基本方法。 实验内容 建立含有若干个元素的顺序表; 对已经建立的顺序表实现插入、删除、查找、合并等基本操作。 #include<stdio.h> #include<stdlib.h> #define OK 1 #define TRUE 1 #define FLASE 0 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100#define LISTINCREMENT 10 typedef int Status; typedef struct { int *elem; int lenth; int listsize; }Sqlist; Status InitList_Sqlist(Sqlist *L) { (*L).elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!(*L).elem) exit(OVERFLOW); (*L).lenth = 0; (*L).listsize = LIST_INIT_SIZE; return OK; } int greatelist_sq(Sqlist *L) { int i; printf("请输入数据\n"); for(i = 0;i < (*L).lenth; i++) { scanf("%d",&(*L).elem[i]); } return OK; } Status listinsert_sq(Sqlist *L,int i,int e) { int *p, *q, *newbase; if(i < 1 || i > (*L).lenth) return ERROR; if((*L).lenth >= (*L).listsize) { newbase = (int *)realloc((*L).elem,((*L).listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(OVERFLOW); (*L).elem = newbase; (*L).listsize += LISTINCREMENT; } q = &((*L).elem[i-1]); for(p=&((*L).elem[(*L).lenth-1]);p >= q;--p) *(p+1) = *p; *q = e; ++(*L).lenth; return OK; } Status listdelete_sq(Sqlist *L,int i,int &e) { int *p, *q; if(i < 1||i > (*L).lenth) return ERROR; p = &((*L).elem[i-1]); e = *p; q = (*L).elem+(*L).lenth-1; for(++p;p <= q;++p) *(p-1) = *p; --(*L).lenth; return OK; } void output(Sqlist *L) { printf("输出序列为:\n"); int i; for(i = 0;i < (*L).lenth; i++) printf("%d ",(*L).elem[i]); printf("\n"); } int main() { int i, n, e; Sqlist L; InitList_Sqlist(&L); printf("\n"); scanf("%d",&n); L.lenth = n; greatelist_sq(&L); output(&L); scanf("%d%d",&i,&e); listinsert_sq(&L,i,e); output(&L); scanf("%d",&i); e = 0; listdelete_sq(&L,i,e); printf("被删除的元素为第%d位的%d\n",i, e); output(&L); return 0; }