赞
踩
- #define MAXSIZE 20 //线性表最长长度
- typedef int ElemType; //数据类型
- typedef struct{
- ElemType data[MAXSIZE];
- int length;
- }SqList;
函数说明
- /**
- * 顺序表
- * InitList(*L) 初始化
- * ListEmpty(L) 若为空,返回true
- * ClearList(*L) 清空
- * GetElem(L,i,*e) 第i个位置元素返回给e
- * LocateElem(L,e) 查找与e相同的元素,返回元素在表中序号
- * ListInsert(*L,i,e) 第i个元素之前插入元素
- * ListDelete(*L,i,*e) 删除L的第i个数据
- * * @return
- */
- int i;
-
- Status InitList(SqList *L){
- L->length = 0;
- for(i = 0;i < MAXSIZE; i++){
- L->data[i] = i;
- L->length++;
- }
- return OK;
- }
-
- Status Output(SqList *L){
- for(i = 0; i < MAXSIZE; i++){
- printf("%d ",L->data[i]);
- }
- printf("L->length:%d\n",L->length);
- return OK;
- }
-
- Status GetElem(SqList L,int i,ElemType *e){
- *e = L.data[i-1];
- return OK;
- }
-
- Status LocateElem(SqList L,ElemType e){
- for(int i = 0; i < MAXSIZE; i++){
- if(L.data[i]==e){
- return i;
- }
- }
- return FALSE;
- }
-
- Status ListInsert(SqList *L,int i,ElemType e){
- int k;
- if(L->length == MAXSIZE)
- return ERROR;
- if(i < 1 || i > L->length+1)
- return ERROR;
- if(i<=L->length){
- for(k = L->length-1;k>=i-1;k--)
- L->data[k+1] = L->data[k];
- }
- L->data[i-1] = e;
- L->length++;
- return OK;
- }
-
- Status ListDelete(SqList *L,int i,ElemType *e){
- int k;
- if(L->length == 0)
- return ERROR;
- if(i<1 || i>L->length)
- return ERROR;
- *e = L->data[i-1];
- if(i<L->length){
- for(k=i;k<L->length;k++)
- L->data[k-1] = L->data[k];
- }
- L->length--;
- return OK;
- }
- int main() {
-
- int i = 0;
- ElemType e;
- //定义L
- SqList L;
- //初始化L
- InitList(&L);
- //输出L
- Output(&L);
-
- //第i个位置元素返回给e
- printf("请输入i的值:");
- scanf("%d",&i);
- GetElem(L,i,&e);
- printf("e的值是:%d\n",e);
-
- //查找与e相同的元素,返回元素在表中序号
- printf("请输入e的值:");
- scanf("%d",&e);
- int j = LocateElem(L,e);
- if(j==FALSE){
- printf("没有与e相同的元素");
- }else{
- printf("元素在表中的序号是:%d\n",j);
- }
-
- //删除L的第i个数据
- printf("请输入要删除第几个数据:");
- scanf("%d",&i);
- ListDelete(&L,i,&e);
- printf("删除后的线性表:");
- Output(&L);
-
- //第i个元素之前插入元素
- printf("请输入i的值:");
- scanf("%d",&i);
- printf("请输入要插入输的值");
- scanf("%d",&e);
- ListInsert(&L,i,e);
- printf("插入后的线性表:");
- Output(&L);
-
- return 0;
- }
- typedef int ElemType;
- typedef struct Node{
- ElemType data;
- struct Node *next;
- }Node;
- typedef struct Node *LinkList;
- /**
- * 单链表
- * InitLinkList(L) 初始化L
- * OutputLinkList(L) 输出L
- * LinkedListCreateH 头插法
- * LinkedListCreateT 尾插法
- * Length(L) 长度
- * GetElem(L,i,*e) 获取第i个元素值
- * ListInsert(L,i,e) 在i个节点之前插入新的数
- * ListDelete(L,i,*e) 删除第i个节点
- * ClearList(L)
- * @return
- */
- LinkList InitLinkList(){
- LinkList L;
- L = (LinkList)malloc(sizeof(Node));
- if(L==NULL)
- printf("空间分配失败");
- L->next = NULL;
- return L;
- }
-
- //头插法
- LinkList LinkedListCreateH(LinkList L){
- ElemType x;
- for(int i=0;i<5;i++){
- printf("请输入第%d个数据:",i+1);
- scanf("%d",&x);
- LinkList p;
- p = (LinkList)malloc(sizeof(Node));
- p->data = x;
- p->next = L->next;
- L->next = p;
- }
- return L;
- }
-
- //尾插法
- LinkList LinkedListCreateT(LinkList L){
- LinkList r;
- r = L;
- while(r->next){
- r = r->next;
- }
- ElemType x;
- for (int i = 0; i < 5; i++) {
- printf("请输入第%d个数据:",i+1);
- scanf("%d",&x);
- LinkList p;
- p = (LinkList)malloc(sizeof(Node));
- p->data = x;
- r->next = p;
- r = p;
- }
- r->next = NULL;
-
- return L;
- }
-
-
- Status OutputLinkList(LinkList L){
- LinkList p = L->next;
- while(p!=NULL){
- printf("%d ",p->data);
- p = p->next;
- }
- return OK;
- }
-
- Status Length(LinkList L){
- int length = 0;
- LinkList p;
- p = L->next;
- while(p){
- p = p->next;
- length++;
- }
- return length;
- }
-
- Status GetElem(LinkList L,int i,ElemType *e){
- int j;
- LinkList p;
- p = L->next;
- j = 1;
- while (p && j<i){
- p = p->next;
- ++j;
- }
- if(!p || j>i)
- return ERROR;
- *e = p->data;
- return OK;
- }
-
- LinkList ListInsert(LinkList L,int i,ElemType e){
- int j;
- LinkList p,s;
- p = L;
- j = 1;
- while (p && j<i){
- p = p->next;
- ++j;
- }
- if(!p || j>i)
- return ERROR;
- s = (LinkList)malloc(sizeof(Node));
- s->data = e;
- s->next = p->next;
- p->next = s;
-
- return L;
- }
-
- LinkList ListDelete(LinkList L,int i,ElemType *e){
- int j;
- LinkList p,q;
- p = L; //一开始p是指向头指针的,所以数值为空
- j = 1;
- while(p->next && j<i){
- p = p->next;
- ++j;
- }
- if(!(p->next)||j >i)
- return ERROR;
- q = p->next;
- p->next = q->next;
- *e = q->data;
- free(q);
- return L;
- }
-
- LinkList ClearList(LinkList L){
- LinkList p,q;
- p = L->next;
- while(p){
- q = p->next;
- free(p);
- p = q;
- }
- L->next = NULL;
- }
-
- Status IsClear(LinkList L){
- LinkList p;
- p = L;
- if(p->next==NULL)
- return OK;
- else
- return FALSE;
- }
- int main() {
- //初始化
- LinkList L = InitLinkList();
- //头插法
- LinkedListCreateH(L);
- //输出
- OutputLinkList(L);
- //尾插法
- LinkedListCreateT(L);
- //输出
- OutputLinkList(L);
- //长度
- int length = Length(L);
- printf("L长度是:%d\n",length);
-
- int i;
- ElemType e;
- printf("请输入要获取第几个元素的值:");
- scanf("%d",&i);
- GetElem(L,i,&e);
- printf("第%d个元素的值是:%d\n",i,e);
-
- printf("请输入要在第几个数据之前插入:");
- scanf("%d",&i);
- printf("请输入要插入的值:");
- scanf("%d",&e);
- ListInsert(L,i,e);
- //输出
- OutputLinkList(L);
-
- printf("请输入要删除第几个数值:");
- scanf("%d",&i);
- ListDelete(L,i,&e);
- //输出
- OutputLinkList(L);
-
- ClearList(L);
- printf("线性表是否清除:%d\n",IsClear(L));
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。