当前位置:文档之家› 数据结构实验报告代码

数据结构实验报告代码

线性表代码一#include "stdio.h"#include "malloc.h"#define OK 1#define ERROR 0#define OVERFLOW -2#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct {int * elem;int length;int listsize;}SqList;int InitList_Sq(SqList *L) {L->elem = (int*)malloc(LIST_INIT_SIZE*sizeof(int));if (!L->elem) return ERROR;L->length = 0;L->listsize = LIST_INIT_SIZE;return OK;}int ListInsert_Sq(SqList *L, int i,int e) {int *p,*newbase,*q;if (i < 1 || i > L->length+1) return ERROR;if (L->length >= L->listsize) {newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof (int));if (!newbase) return ERROR;L->elem = newbase;L->listsize += LISTINCREMENT;}q = &(L->elem[i-1]); //插入后元素后移for(p=&(L->elem[L->length-1]);p>=q;p--)*(p+1)=*p;*q=e;L->length++;return OK;}int ListDelete_Sq(SqList *L, int i, int *e) {int *p, *q;if (i<1 || i>L->length) return ERROR;p = &(L->elem[i-1]);*e = *p;q = L->elem+L->length-1;for(p=&L->elem[i-1];p<q;p++)*p=*(p+1);--L->length;return OK;}int ListLength_Sq(SqList L) //求顺序表的长度{//实现此函数printf("链表长度为%d\n",L.length);return 1;}int PrintList_Sq(SqList L)//输出顺序表中的元素{//实现此函数int *p,c=0;for(p=&L.elem[c];c<L.length;c++){printf("第%d元素:%d\n",c+1,L.elem[c]);}return 1;}//顺序表应用void Reverse_SeqList(SqList *PL)//顺序表逆置{int i ;int x;for(i=1;i<=PL->length/2;i++){x=PL->elem[i-1];PL->elem[i-1]=PL->elem[PL->length -i];PL->elem[PL->length-i]=x;}}int main()SqList L;int e, m,i,a,n=0;InitList_Sq(&L);printf("链表输入多少个元素n:");scanf("%d",&m);for(a=0;a<m;a++){i=a+1;printf("输入插入链表元素大小e:");scanf("%d",&e);ListInsert_Sq(&L,i,e);}while(n!=10){printf("(1)出顺序表中的元素:1 (2)删除指定的第i个元素:2 \n");printf("(3)输出顺序表的长度:3 (4)将顺序表逆置:4\n");printf("(5)顺序链表插入元素:5 (6)退出:6\n");printf("请输入你的选择:");scanf("%d",&n);switch(n){case 1:PrintList_Sq(L);; break;case 2: printf("删除指定的第i个元素:");scanf("%d",&i);ListDelete_Sq(&L,i,&e);printf("删除元素大小为:%d\n",e);; break;case 3: ListLength_Sq(L); break;case 4: Reverse_SeqList(&L); break;case 5: printf("插入指定的第i个元素之前:");scanf("%d",&i);printf("插入元素大小为:");scanf("%d",&e);ListInsert_Sq(&L,i,e); break;case 6: printf("即将退出");n=10;break;default:printf("输入错误\n");n=10;break;}}return 0;}代码二#include "stdio.h"#include "malloc.h"#define OK 1#define ERROR 0#define OVERFLOW -2//#define NULL 0typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////LinkList CreateList_L(LinkList L, int n) // 头插入法插入n个元素的值,建立带表头结点的单链线性表L{int i;LinkList p,r;L=(LinkList)malloc(sizeof(LNode));// 先建立一个带头结点的单链表L->next = NULL;r=L;for(i=1;i<=n;i++){p=(LinkList)malloc(sizeof(LNode));printf("输入元素大小:");scanf("%d",&p->data);p->next=r->next;r->next=p;}return L;} // CreateList_L////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////int ListInsert_L(LinkList L, int i, int e) // 在带头结点的单链线性表L的第i个元素之前插入元素e{int j = 0;LinkList p,s;s=(LinkList)malloc(sizeof(LNode));p = L;while (p && j < i-1){ p = p->next;++j; } // 寻找第i-1个结点if (!p || j > i-1) {printf("%s\n","Insert ERROR");return ERROR;} // i小于1或者大于表长else {s->data=e;s->next=p->next;p->next=s;}return OK;} // LinstInsert_L////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////int ListDelete_L(LinkList L, int i, int *e)// 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值{LinkList p,q;int j = 0;p = L;while (p->next && j < i-1) {p = p->next;++j;} // 寻找第i个结点,并令p指向其前趋if (!(p->next) || j > i-1) {printf("%s\n","Delete ERROR");return ERROR;} // 删除位置不合理else {q=p->next;p->next=q->next;*e=q->data;free(q);}return OK;} // ListDelete_L////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////int ListLength_L(LinkList L){ //求单链表的长度LinkList p;int j = 0;p = L;while (p){p = p->next;++j; } // 寻找第i-1个结点printf("结点个数为:%d\n",j-1);return OK;}////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////int ListPrint_L(LinkList L) //对单链表输出{int j = 0;LinkList p;p=(LinkList)malloc(sizeof(LNode));p=L;while(p->next){j++;p = p->next;printf("第%d元素大小为:%d\n",j,p->data);}return OK;}////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////void InvertList( LinkList L ) //单链表逆置{LinkList p , q ;p = L->next;L->next = NULL;while ( p ){q=p->next;p->next=L->next;L->next =p;p=q;}printf("单链表逆置完成!!!\n");}////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////int main(){int e,m,n,i;LinkList head;printf("输入所要输入元素的个数n=");scanf("%d",&m);head=CreateList_L(head,m); //单链表中插入n个元素,其中n由程序输入。

相关主题