一.顺序表
#include#define maxsize 100 #include #define error 0 #define ok 1 typedef int elemtype; elemtype elem[maxsize]; int length; }sqlist; typedef struct { sqlist* creatlist() //初始化 { sqlist* L; L = (sqlist*)malloc(sizeof(sqlist));//在内存上腾出一个空间 if (!L) return NULL; else { L->length = 0; return L; } } void assignsqlist(sqlist * L) //顺序表赋值(sqlist * L:指向顺序表地址) { int i; printf("请输入元素个数:"); scanf_s("%d", &L->length); printf("按照元素个数依次输入元素值:"); for (i = 0; i < L->length; i++) scanf_s("%d", &L->elem[i]); } void outputsqlist(sqlist* L) //输出 { int i; printf("顺序表的长度是%dn", L->length); printf("顺序表的元素依次是:"); for (i = 0; i < L->length; i++) printf("%4d", L->elem[i]); printf("n"); } int insertsqlist(sqlist* L, int i, elemtype e) //插入 { int j; if (i<1 || i>L->length + 1) return error; if (L->length >= maxsize) { printf("线性表溢出n"); return error; } for (j = L->length - 1; j >= i - 1; --j) L->elem[j + 1] = L->elem[j]; L->elem[i - 1] = e; L->length++; return ok; } int deletesqlist(sqlist* L, int i) //删除 { int j; if (i<1 || i>L->length) return error; if (L->length <= 0) { printf("线性表为空n"); return error; } for (j = i; j <= L->length - 1; ++j) L->elem[j - 1] = L->elem[j]; L->length--; return ok; } int getData(sqlist *L, int i) { //按照元素位查询 if (i<1 || i>L->length) { printf("顺序表越界!n"); exit(0); } return ok; } int locate(sqlist* L, int e) { int i = 0; while (i <= L->length && L->elem[i] != e) { i++; } if (i length && L->elem[i] == e) { return i + 1; } return -1; } int main() { sqlist * L = nullptr; int k, i, e; do { printf("nnnn"); printf("ttt 链表子系统n"); printf("tt*******************************n"); printf("tt* 1----初 始 化 *n"); printf("tt* 2----赋 值 *n"); printf("tt* 3----删 除 *n"); printf("tt* 4----插 入 *n"); printf("tt* 5----显 示 *n"); printf("tt* 6----按下标查询 *n"); printf("tt* 7----按元素查询 *n"); printf("tt* 0----返 回 *n"); printf("tt*******************************n"); printf("tt 请选择菜单项(0-7):"); scanf_s("%d", &k); //getchar(); switch (k) { case 1: L = creatlist(); if (L == NULL) printf("初始化顺序表失败n"); else printf("初始化顺序表成功n"); break; case 2: assignsqlist(L); outputsqlist(L); break; case 3: printf("请输入删除元素的位置:"); scanf_s("%d", &i); k = deletesqlist(L, i); if (k == 1) { printf("删除操作成功,删除元素后顺序表如下n"); outputsqlist(L); } else printf("删除操作失败n"); break; case 4: printf("请输入插入位置和插入数据:"); scanf_s("%d%d", &i, &e); k = insertsqlist(L, i, e); if (k == 1) { printf("插入操作成功!插入元素后顺序表如下n"); outputsqlist(L); } else printf("插入操作失败n"); break; case 5: outputsqlist(L); break; case 6: printf("请输入要查找的元素:"); scanf_s("%d", &e); getData(L ,e); printf("你查找的下标是:%d",L->elem[e-1]); break; case 7: int index; printf("你输入查找的元素:"); scanf_s("%d",&e); index = locate(L,e); printf("你查找的元素%d在第%d的位置。n",e,index); break; case 0: exit(0); break; } } while (k != 0); system("pause");// return 0; }
二.链表设计
#include#include typedef int elemtype; typedef struct Node { elemtype data; struct Node* next; }linknode, * linklist; linklist init_linklist() { linklist l; l = (linklist)malloc(sizeof(linknode)); l->next = NULL; return l; } linklist Creat_linkList_1() //尾插入法建立单链表算法 { linklist head, rear; //头指针,尾指针 head = (linklist)malloc(sizeof(linknode)); head ->next = NULL; rear = head; linknode *s; //定义一个待插入结点数据类型 elemtype x; //设待插入数据元素的类型为int printf("请输入每个结点的值域(0结束): "); scanf_s("%d", &x); while (x != 0) //当输入的值不为0时,进入循环 { s = (linklist)malloc(sizeof(linknode)); //申请新结点 s->data = x; //对新结点赋值 s->next = rear->next; rear->next = s; rear = s; scanf_s("%d", &x); //输入新数据 } return head; } linknode* locatenode(linklist head, elemtype i) { linknode *p; int j = 0; //将头结点的位置设为0 p = head; while (p && j < i) { p = p->next; j++; } if (j == i) return p; else return NULL; } linknode* locatenode_1(linklist head, elemtype x) { linknode* p; p = head->next; while (p && p->data != x) p = p->next; return p; } linklist insert_linklist(linklist L, int i, elemtype x) { linknode * p, * s; int j = 0; //设头结点的位置为0 p = L; while (p && j < i - 1) //p指向第i-1个结点 { p = p->next; j++; } if (p == NULL) { printf("插入位置失败n"); return NULL; } else { s = (linknode *)malloc(sizeof(linklist)); s->data = x; s->next = p->next; p->next = s; return p; } } int del_linklist(linklist L, elemtype i) { linknode* p, * s; elemtype x; p = L; s = locatenode(p, i - 1); if (s == NULL) { printf("第i-1个结点不存在"); return 0; } else if (s->next == NULL) { printf("第i个结点不存在"); return 0; } else { p = s->next; s->next = p->next; x = p->data; free(p); return x; } } void outputnode(linklist L) //输出单链表 { linknode* p; p = L->next; //指向头结点后的第一个结点 while (p->next != NULL) { printf("%d->", p->data); //输出表中非最后一个元素 p = p->next; } printf("%dn", p->data); //输出表中最后一个元素 } int main() { linklist L; L = init_linklist(); int i, e, k; linknode* p; elemtype x; do { printf("nnnn"); printf("ttt 链表子系统n"); printf("tt*********************************n"); printf("tt* 1----初 始 化 *n"); printf("tt* 2----赋 值 *n"); printf("tt* 3----插 入 *n"); printf("tt* 4----删 除 *n"); printf("tt* 5----显 示 *n"); printf("tt* 6----按序号查询 *n"); printf("tt* 7----按值 查询 *n"); printf("tt* 0----返 回 *n"); printf("tt*********************************n"); printf("tt 请选择菜单项(0-7):"); scanf_s("%d", &k); //getchar(); switch (k) { case 1: L = init_linklist(); if (L == NULL) printf("初始化顺序表失败n"); else printf("初始化顺序表成功n"); break; case 2: L = Creat_linkList_1(); printf("表的存储顺序为:"); outputnode(L); break; case 3: printf("请输入插入位置和插入数据:"); scanf_s("%d%d", &i, &e); p = insert_linklist(L, i, e); if (p != NULL) { printf("插入操作成功!插入元素后顺序表如下n"); outputnode(L); } else printf("插入操作失败n"); break; case 4: printf("请输入删除元素的位置:"); scanf_s("%d", &i); k = del_linklist(L, i); if (k == 0) printf("删除失败n"); else { printf("删除成功n"); printf("删除元素值为 %dn", k); printf("删除后链表存储顺序为:"); outputnode(L); } break; case 5: printf("表的存储顺序为:"); outputnode(L); break; case 6: L = Creat_linkList_1(); printf("请输入要查找的序号i(头结点的序号为0):"); //头结点的序号为0 scanf_s("%d", &i); p = locatenode(L, i); if (p == NULL) printf("查询失败,没有此元素n"); else printf("查询成功n"); outputnode(L); printf("中序号为 %d 的值是 %d ", i, p->data); break; case 7: L = Creat_linkList_1(); printf("请输入待查找的元素值:"); scanf_s("%d", &x); p = locatenode_1(L , x); if (p == NULL) printf("查询失败,没有此元素n"); else printf("查询成功n"); break; } } while (k != 0); return 0; }
注意:代码框架不是为我所有,但是核心代码的编写是自己参考实例实现。



