数据结构-顺序表(C语言实现)
生活随笔
收集整理的這篇文章主要介紹了
数据结构-顺序表(C语言实现)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
主函數(shù)代碼(main.c)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include "sqlist.h" int main() {sqlist *list= NULL,*list_next= NULL;int pos = 0;int i, err, value;int arr[10] = { 10,20,30,40,50,60,70,80,90,100 };int arr_next[10] = { 11,22,33,44,55,66,77,88,99,111 };//創(chuàng)建一個順表list,并初始化list = create_sqlist();if (list == NULL){fprintf(stderr, "create_sqlist()failed\n");}for (i = 0; i < 10; i++){add_sqlist(list, &i);}for (i = 0; i < sizeof(arr) / sizeof(*arr); i++){if ((err = insert_sqlist(list, 2, &arr[i]))!=0){if (err = -1){fprintf(stderr, "The arr is full\n");}else if (err = -2){fprintf(stderr, "The pos you want to insert is wrong\n");}else{fprintf(stderr, "ERROR\n");}}}display_sqlist(list);/*根據(jù)下標刪除元素部分測試代碼,pos==0跳出循環(huán)*//*do {printf("請輸入您要刪除的元素下標從1開始\n");scanf("%d", &pos);err = delete_sqlist(list, pos);display_sqlist(list);} while (pos);*//*給出下標查找元素部分測試代碼,pos==2000退出循環(huán)*///while (1)//{// scanf("%d", &pos);// find_sqlsit(list, pos);// if (pos == 2000)// {// break;// }//}/*給出元素查找下標部分測試代碼,查找失敗退出循環(huán)*//*while (1){printf("請輸入您要查找的元素\n");scanf("%d", &value);pos=find1_sqlist(list, &value);if (pos == 0){printf("查找失敗,順序表中沒有該元素\n");break;}else if (pos == -1){printf("查找失敗, 順序表為空\n");}else {printf("%d的下標時%d\n", value, pos);}}*///創(chuàng)建一個順表list_next,并初始化list_next = create_sqlist();if (list_next == NULL){fprintf(stderr, "create_sqlist()failed\n");}for (i = 0; i < 10; i++){add_sqlist(list_next, &i);}for (i = 0; i < sizeof(arr_next) / sizeof(*arr_next); i++){if ((err = insert_sqlist(list_next, 2, &arr_next[i])) != 0){if (err = -1){fprintf(stderr, "The arr is full\n");}else if (err = -2){fprintf(stderr, "The pos you want to insert is wrong\n");}else{fprintf(stderr, "ERROR\n");}}}display_sqlist(list_next);union_sqlist(list, list_next);display_sqlist(list);destroy_sqlist(list_next);destroy_sqlist(list);}sqlist.h文件代碼(負責函數(shù)聲明)
#ifndef SQLIST_H__ #define SQLIST_H_ #define MAX_LENGTH 1024 typedef int datatype;typedef struct sqlist {datatype data[MAX_LENGTH];int size; }sqlist; sqlist* create_sqlist(void); void create_sqlist1(sqlist *ps);//創(chuàng)建順序表 void display_sqlist(sqlist *ps);//打印順序表 int add_sqlist(sqlist *ps,datatype *num);//順序表結尾添加元素 int delete_sqlist(sqlist *ps,int pos);//刪除順序表pos處的元素 int insert_sqlist(sqlist *ps,int pos,datatype *num);//順序表pos處插入元素 void destroy_sqlist(sqlist *ps);//銷毀順序表 int find_sqlsit(sqlist *ps,int pos);//給出下標找元素 int find1_sqlist(sqlist *ps, datatype* value);//給出元素查下標 int setempty_sqlist(sqlist* ps);//順序表置為空 int union_sqlist(sqlist* list1, sqlist* list2);//順序表的合并 #endifsqlist.c文件代碼(負責函數(shù)定義)
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> #include "sqlist.h" sqlist* create_sqlist(void) {sqlist *ps;ps=(sqlist*)malloc(sizeof(sqlist));if (ps == NULL){return NULL;}else{ps->size = 0;return ps;} }void create_sqlist1(sqlist *ps) {ps = malloc(sizeof(sqlist));if (ps == NULL){return;}else{ps->size = 0;return;} }void display_sqlist(sqlist *ps) {if (ps->size == 0){printf("數(shù)組為空\n");return ;}int i = 0;printf("數(shù)組中元素個數(shù)為%d\n", ps->size);printf("數(shù)組中的元素依次為:\n");for (i = 0; i < ps->size; i++){printf("%d : %d\n", i + 1, ps->data[i]);} } int add_sqlist(sqlist *ps,datatype *num) {ps->data[ps->size] = *num;ps->size++;//printf("元素添加成功\n");return 0;}int insert_sqlist(sqlist *ps, int pos, datatype *num) {int j = 0;if (ps->size == MAX_LENGTH){return -1;}if (pos < 0 || pos > ps->size){return -2;}for (j = ps->size;j > pos;j--){ps->data[j] = ps->data[j-1];}ps->data[pos] = *num;ps->size++;/*printf("元素插入成功\n");*/return 0;}int delete_sqlist(sqlist *ps, int pos) {int i = 0;pos = pos - 1;if (ps->size == 0){printf("刪除失敗, 順序表為空\n");return -1;}if (pos<0 || pos>=ps->size){printf("刪除失敗,pos處沒有元素\n");return -2;}for (i = pos; i < ps->size-1; i++){ps->data[i] = ps->data[i + 1];}ps->size--;printf("pos處的元素刪除成功\n");return 0; }//給出下標找元素 int find_sqlsit(sqlist *ps,int pos) {if (ps->size == 0){printf("查找失敗, 順序表為空\n");return -1;}if (pos <= 0 || pos > ps->size){printf("查找失敗,pos處沒有元素\n");return -2;}printf("順序表中第%d個元素為%d",pos, ps->data[pos -1]);printf("查找成功\n");return 0; }//給出元素查下標 int find1_sqlist(sqlist *ps, datatype* value) {int i = 0;if (ps->size == 0){return -1;}for (i = 0; i < ps->size; i++){if (ps->data[i] == *value){return i + 1;}}return 0; }int setempty_sqlist(sqlist* ps) {ps->size = 0;return 0; }int union_sqlist(sqlist* list1, sqlist* list2)//順序表的合并 {int i = 0;//list1后面追加list2中與list1中不同的元素//list1 12 34 56 78 90//list2 23 90 45 67 78 //合并后的結果list1 12 34 56 78 90 23 45 67 //思路:先查找在插入//查找:list1中是否有l(wèi)ist2中第i個元素,若有則不插入,若無則插入if (list2 == NULL&&list1 !=NULL) {printf("list1與list2合并成功\n");return 0;}if (list1 == NULL){printf("list1與list2合并失敗\n");return -1;}for (i = 0; i < list2->size; i++){if ((find1_sqlist(list1, &list2->data[i])) <= 0){insert_sqlist(list1, list1->size, &list2->data[i]);}}printf("list1與list2合并成功\n");return 0; }void destroy_sqlist(sqlist *ps) {free(ps);ps = NULL;}總結
以上是生活随笔為你收集整理的数据结构-顺序表(C语言实现)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 51单片机C语言led流水灯及数码管实现
- 下一篇: c语言see函数,vprintf() -