码迷,mamicode.com
首页 > 其他好文 > 详细

完整的顺序表例子_byseyOrd

时间:2020-04-20 16:18:11      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:amp   return   str   pre   ror   std   typedef   例子   检验   

 

 

 

  1 #include "stdafx.h"
  2 #include<stdio.h>
  3 #include<malloc.h>
  4 #include<stdlib.h>
  5 
  6 #define LINK_INIT_SIZE 100
  7 #define LISTINCREAMENT 10
  8 #define ElemType int
  9 #define OVERFLOW -2
 10 #define OK 1
 11 #define ERROR 0
 12 
 13 typedef int status;
 14 
 15 //定义顺序表,并定义一个新类型Sqlist
 16 typedef struct Sqlist{
 17     ElemType *elem;
 18     int listsize;
 19     int length;
 20 }Sqlist;
 21 
 22 //函数声明
 23 status InitList(Sqlist &L);
 24 status CreatList(Sqlist &L);
 25 status PrintfList1(Sqlist L);
 26 status PrintfList2(Sqlist L);
 27 status DeleteList(Sqlist &L, int i);
 28 status ListEmpty(Sqlist L);
 29 status ListLength(Sqlist L);
 30 status InsertList(Sqlist &L, int i, ElemType e);
 31 status DestroyList(Sqlist &L);
 32 
 33 int main()
 34 {
 35     int i, n, j;
 36     ElemType e;
 37     Sqlist L1;
 38     InitList(L1);    //顺序表初始化操作
 39 
 40     ListEmpty(L1);    //顺序表判空
 41 
 42     CreatList(L1);    //顺序表赋值操作
 43 
 44     printf("正序输出为:\n");
 45     PrintfList1(L1);    //顺序表正序输出操作
 46     printf("\n");
 47     printf("逆序输出为:\n");
 48     PrintfList2(L1);    //顺序表逆序输出操作
 49     printf("\n");
 50 
 51     ListLength(L1);    //求顺序表表长
 52 
 53     printf("请输入插入的位置i=");
 54     scanf_s("%d", &i);
 55     e = rand() % 100 + 1;
 56     InsertList(L1, i, e);    //顺序表插入操作
 57     PrintfList1(L1);
 58     printf("\n");
 59 
 60     printf("请输入删除的位置j=");
 61     scanf_s("%d", &j);
 62     DeleteList(L1, j);    //顺序表删除操作
 63     PrintfList1(L1);
 64 
 65     DestroyList(L1);    //顺序表销毁操作
 66     PrintfList1(L1);
 67     return 0;
 68 }
 69 
 70 //构建空的顺序表
 71 status InitList(Sqlist &L)
 72 {
 73     L.elem = (ElemType*)malloc(LINK_INIT_SIZE*sizeof(ElemType));
 74     if (!L.elem)
 75         exit(OVERFLOW);
 76     L.length = 0;    //将新的顺序表长度定为0
 77     L.listsize = LINK_INIT_SIZE;    //初始化顺序表大小为LINK_INIT_SIZE
 78     return OK;
 79 }
 80 
 81 //顺序表插入操作
 82 status InsertList(Sqlist &L, int i, ElemType e)
 83 {
 84     ElemType *newbase, *q, *p;
 85     if (i<1 || i>L.length + 1)
 86     {
 87         printf("未插入成功!!!\n");
 88         return ERROR;
 89     }
 90     if (L.length >= L.listsize)
 91     {
 92         newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREAMENT)*sizeof(ElemType));
 93         if (!newbase)
 94             exit(OVERFLOW);
 95         L.elem = newbase;
 96         L.listsize += LISTINCREAMENT;
 97     }    //检验线性表是否满了,满了则重新增加存储空间
 98     q = &(L.elem[i - 1]);
 99     for (p = &(L.elem[L.length - 1]); p >= q; p--)
100         *(p + 1) = *p;
101     *q = e;
102     L.length++;
103     return OK;
104 }
105 
106 //顺序表输入操作
107 status CreatList(Sqlist &L)
108 {
109     ElemType i = 0, e;
110     for (i = 0; i < 10; i++)    //顺序表赋值操作
111     {
112         L.elem[i] = rand() % 100 + 1;
113         L.length++;
114     }
115     return 0;
116 }
117 
118 //顺序表正序输出操作
119 status PrintfList1(Sqlist L)
120 {
121     int i;
122     if (L.length == 0)
123     {
124         printf("该线性表为空!\n");
125         return 0;
126     }
127     for (i = 0; i < L.length; i++)
128         printf("L.elem[%d]=%d\n", i + 1, *(L.elem + i));
129 }
130 
131 //顺序表删除操作
132 status DeleteList(Sqlist &L, int i)
133 {
134     int *p, *q, e;
135     if (i<1 || i>L.length + 1)
136     {
137         printf("不存在此删除位置!!!\n");
138         return ERROR;
139     }    //检验输入的i是否在线性表所存在的范围内
140     p = &(L.elem[i - 1]);
141     e = *p;
142     q = L.elem + L.length - 1;
143     for (p++; p <= q; ++p)
144         *(p - 1) = *p;
145     L.length--;
146     printf("删除的元素为%d\n", e);
147     return 0;
148 }
149 
150 //顺序表逆序输出操作
151 status PrintfList2(Sqlist L)
152 {
153     int i;
154     if (L.length == 0)
155     {
156         printf("该线性表为空!\n");
157         return 0;
158     }
159     for (i = L.length - 1; i >= 0; i--)
160         printf("L.elem[%d]=%d\n", i + 1, *(L.elem + i));
161 }
162 
163 //求顺序表是否为空
164 status ListEmpty(Sqlist L)
165 {
166     if (L.length == 0)
167         printf("The List is Empty!!!\n");
168     else
169         printf("The List is not Empty!!!\n");
170     return 0;
171 }
172 
173 //求顺序表长度
174 status ListLength(Sqlist L)
175 {
176     printf("线性表的长度为%d\n", L.length);
177     return OK;
178 }
179 
180 status DestroyList(Sqlist &L)
181 {
182     free(&L.elem[0]);
183     L.length = 0;
184     return 0;
185 }

 

完整的顺序表例子_byseyOrd

标签:amp   return   str   pre   ror   std   typedef   例子   检验   

原文地址:https://www.cnblogs.com/seyOrd/p/12737955.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!