一、特点
1、表头、表尾,其他元素有且仅有一个直接前驱和直接后继
2、任何位置可以插入、删除
二、存储方式
1、顺序表
2、链表(单向链表、双向循环链表)
三、具体实现方式
1、顺序表
问题:
用顺序表存储一些正整数,输入正整数表示插入数据(比如输入3表示插入3),输入负整数表示删除数据(比如输入-2表示删除2),输入字符表示退出程序。插入和删除的过程中保持该表递增有序。
//seqlist.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define SIZE 10 /*数组的长度*/ typedef int datatype; /*定义结构体*/ typedef struct seqlist { datatype data[SIZE]; //数组 int last; //定位元素 }seq_list, *seq_plist; #endif //test.c #include "seqlist.h" int main(void) { int a; //输入的数 int ret; seq_plist s; s = seqlist_init(); //初始化顺序表 while(1){ printf("请输入一个数:\n"); ret = scanf("%d", &a); if(ret != 1) exit(1); else if(data >= 0) seqlist_insert(s, a); else seqlist_del(s,-a); } return 0; } //seqlist.c #include "seqlist.h" seq_plist seqlist_init(void) //初始化函数 { seq_plist s; s = (seq_plist)malloc(sizeof(seq_list)); if(NULL == s){ printf("malloc failed!\n"); exit(1); } s->last = -1; return s; } void seqlist_insert(seq_plist s, typedata a) //插入函数 { if(seqlist_full(s)) return; int i,j; for(i = 0 ; i <= s->last; i++) if(a < s->data[i]) break; for(j = s->last; j >= i; j--) s->data[j+1] = s->data[j]; s->data[i] = data; s->last++; seqlist_show(s); } void seqlist_del(seq_plist s, typedata a) //删除函数 { if(seqlist_empty(s)) return; int i,j; for(i = 0; i <= s->last; i++) if(a = s->data[i]) break; for(j = i; j < s->last; j++) s->data[j] = s->data[j+1]; s->last--; seqlist_show(s); } bool seqlist_full(seq_plist s) //判断顺序表是否已满 { if(s->last == size-1) return true; else return false; } bool seqlist_empty(seq_plist s) //判断顺序表是否已空 { if(s->last == -1) return true; else return false; } void seqlist_show(seq_plist s) //打印顺序表 { int i; for(i = 0; i <= s->last; i++) printf("%d\t", s->data[i]); printf("\n"); }
本文出自 “云飞墨舞” 博客,请务必保留此出处http://wuyunncu.blog.51cto.com/5978596/1684915
原文地址:http://wuyunncu.blog.51cto.com/5978596/1684915